一,熟悉djangoorm模型層:
django使用mysql資料庫首先需要安裝pymysql驅動和mysqlclient,然後還需在django工程同名的子目錄init.py檔案中新增如下語句,即:讓pymysql以mysqldb的執行模式和django的orm對接執行
fromimport pymysqlpymysql impore install_as_mysqldb
install_as_mysqkdb()
或:
pymysql.install_as_mysqldb()
練習:1建立資料庫:
mysql> create database mysite3 default character set utf8mb4 default collate utf8mb4_general_ci;
2在django中配置資料庫:
databases =}
orm中,乙個模型類就代表資料庫中的一張表,模型類中的每乙個類屬性就是資料表裡的每乙個字段,
下面通過乙個模型示例了解orm與資料庫的對應關係:
'bookstore',
]3在django中編寫模型類:
解釋:書名:定義此注釋後,djangoadmin後台會顯示這個名字,不定義則會顯示欄位名:
decimalfield:和小數相關用到的型別,它有2個必須定義的引數,max_digits表示精度,decimal_places表示保留幾位小數,例如:max_digits=7就表示總精度7個0,即:0000000
decimal_places=2就表示兩位小數,即:00000.00
而00000.00就表示萬元級別的,最高就是99999.99
classbook(models.model):
title = models.charfield("
書名",max_length=50,default=''
) price = models.decimalfield('
定價', max_digits=7,decimal_places=2,default=0.0)
4同步資料庫:
python manage.py makemigrations #生成遷移檔案
python manage.py migrate #
執行遷移指令碼
二,orm基礎字段:
booleanfield()布林型:對應mysql資料庫型別tinyint(1),在資料庫中用1或0來表示true和false
charfield()字串型別:對應資料庫型別varchar,注意必須要指定max_length引數值
datefield()日期型別:對應資料庫date表示日期,它有三個引數(只能有乙個引數)分別是:
auto_now:每次儲存物件時,自動設定該字段值為當前時間(取值true/false)
auto_now_add:當物件第一次被建立時,自動設定值為當前時間(取值true/false)
default:設定當前時間(取值:字串格式時間例如:『2021-11-27』)
理論上每張表都應該設定建立時間和更新時間,如下:
建立時間create_time:auto_now_add=true
更新時間update_time:auto_now=true
datetimefield():對應資料庫datetime(6),表示日期和時間,引數同datefield一樣。
floatfield()浮點:對應的資料庫型別時double,在程式語言中和資料庫中都使用小數表示
decimalfield():對應資料庫decimal(x,y)型別,凡是和錢相關的都使用這個型別,該字段有兩個必須引數:
max_digits:位數總數,包括小數點後的位數,該值必須要大於等於decimal_places
decimal_places:小數點後的數字有多少位
emailfield():對應資料庫型別varchar,存郵箱位址用的字段,程式語言和資料庫使用字串
integerfield():對用資料庫int型別
imagefield():對應資料庫型別varchar(100),屬於字串型別,在資料庫中用於儲存路徑
textfield():對應資料庫longtext型別,表示不定長的字元資料
以上為常用的模型類欄位,還有好多,請參閱官方文件:
field-types
三orm模型字段選項:
primary_key:如果為true則表示該列設定成主鍵
blank:設定為true時,字段可以為空,如果設定為false,建議新增預設值default。
default:設定所在列的預設值,一般在新增欄位的時候一定要給個預設值,否則程式可能會報錯。如果字元選項出現null等於false的時候,建議都要設定乙個預設值,但dajngo官方建議我們不要輕易使用null選項,因為這個選項在資料庫中有特殊意義,容易為開發中增添很多坑。
db_index:普通索引,宣告當前的字段是不是要新增索引,如果設定為true表示該列增加索引。
unique:表示唯一索引,如果為true則表示該字段在資料庫中的值必須唯一
db_column:自定義欄位名
verbose_name:設定此字段在admin介面上顯示的名稱
示例:
sender_phone = models.charfield(max_length=255, blank=false, null=true, db_index=true, verbose_name='寄件人**')
null 是針對資料庫而言,如果 null=true, 表示資料庫的該字段可以為空,那麼在新建乙個model物件的時候是不會報錯的!!
blank 是針對表單的,如果 blank=true,表示你的表單填寫該字段的時候可以不填
db_index是建立普通索引
使用內部meta類來給模型賦予屬性,meta類下有很多內建的類屬性,可對模型類做一些控制。
1修改表名:
classbooke(models.model):
class
meta:
db_table = '
book
'
6 Django ORM模型運算元據庫
專案中大量使用原生sql語句使得整個專案的 很繁瑣,就會出現很多問題 sql重複性較高,利用率低。大量原始sql語句可能是各種拼接的結果,當資料庫中內容做了修改,需要一一找到對應的sql進行檢查修改,浪費時間,不一定改全。可能存在sql注入的安全隱患問題,使得專案癱瘓。orm的使用會避免以上問題,其...
關於sklearn中各個聚類模型的特點總結
在sklearn中,聚類模型有 k means affinity propagation mean shift spectral culstering ward hierarchical clustering agglomerative clustering dbscan gaussian mixt...
類的總複習
目錄類指的是一系列物件相同的特徵與技能的結合體 先抽象,抽取物件之間相同的特徵與技能 再定義,1.會產生乙個類的命名空間 2.會把類內部的多有名字,扔進該命名空間內 注意 定義類時,就會執行類內部的 若語法不正確,則會報錯 呼叫類會產生乙個物件,呼叫類的過程稱之為類的例項化,物件稱之為類的乙個例項 ...