- 相關命令
python3 manage.py makemigrations
根據模型生成相關遷移文件
python3 manage.py migrate
根據遷移文件,將表結構更新到數據庫中,並在Django中帶的migrations數據表中更改數據庫記錄
- 字段
- 經常使用的字段
- 自增加字段
- models.AutoField()
- models.BigAutoField()
- 二進制數據
- models.BinaryField()
- 布爾型
- 容許爲空 models.BooleanField()
- 不容許爲空 models.NullBooleanField()
- 整型
- 5個字節的正整數models.PositiveSmallIntegerField()
- 6個字節的整數
models.SmallIntegerField()
- 11個字節的整數
models.IntegerField()
- 20個字節的整數
models.BigIntegerField()
- 字符串類型
- varchar
models.CharField(max\_length=100)
- longtext
models.TextField()
- 時間日期類型
- 年月日
models.DateField()
- 年月日時分秒
models.DateTimeField()
- 一段時間,在數據庫中是int類型,底層是 Python timedelta 實現
models.DurationField()
- 浮點型
- models.FloatField()
- 能夠指定整數多少位,小數多少位
models.DecimalField()
- 其它字段
- 郵箱
models.EmailField()
- models.ImageField()
- models.FileField()
- models.FilePathField()
- models.URLField()
- models.UUIDField()
- IP地址,能夠是IPV4,也能夠是IPV6
models.GenericIPAddressField()
- 關係型字段
- 一對一
models.OneToOneField(Model)
- 多對一
models.ForeignKey(Model)
- 多對多
models.ManyToManyField(Model)
- 字段類型參數
- 全部字段都有的參數
- db_column='name'
- primary_key=True
- verbose_name='別名或者註釋'
- unique=True
- null=True,blank=True
- db_index=True 給表單創建索引
- help_text='' 表單中顯示幫助信息
- editable=False 表單不可編輯
- 個別字段纔有的參數
- 給CharField 指定最大長度 max_length=100
- 時間
- unique_for_date=True
- unique_for_month=True
- auto_now=True 更新時間
- auto_now_add=True 新增時間
- 浮點型 Decimal
- max_digits=4 表示一共有多少位數
- decimal_places=2 表示小數有多少位
- 關係型字段的參數
- related_name='name' 反向查詢時候可能會用到
- on_delete=value
value的值
- CASCADE:刪除引用的對象時,也刪除引用它的對象
- PROTECT:禁止刪除引用的對象。SQL等價物:RESTRICT。
- SET_NULL:將引用設置爲NULL(要求字段能夠爲空),當字段設置null=True纔可使用
- SET_DEFAULT:設置默認值。只有當字段設置了default參數時才能使用 SQL等價物:SET DEFAULT。
- SET(value 或者 函數返回值):設置給定值。這個不是SQL標準的一部分,徹底由Django處理。
- DO_NOTHING:SQL等價物:NO ACTION。
- 自關聯
- 寫法一:
modles.ForeignKey('self',verbose_name='自關聯')
- 寫法二:
modles.ForeignKey('Model',verbose_name='自關聯')
- 元數據,Meta類定義了一些元數據的信息,Meta類的字段以下:
- db_table
- ordering 列表或者元組形式
- verbose_name 別名
- verbose_name_plural 別名複數
- abstract 不一樣步到數據庫,只是用於被別的類繼承
- permissions 定義權限
- managed 是否按照Django規則管理模型類 默認是True
- unique_together=()/((),()) 對應MySQL中的聯合惟一約束
- app_label 指定模型屬於哪一個應用(若是在settings裏面已經註冊過應用的話,就不用寫這個字段了)
- db_tablespace 定義數據庫表空間的名字
- Django 數據表操做
- 更改數據表
- 刪除數據庫表步驟
- 刪除對應的模型類代碼
- 刪除migrationd文件夾下面的模型類
- 刪除Django的migrations表中對應的記錄
- 刪除數據庫表
- 導入數據
- Django shell 導入數據 引入模型 調用模型對象的save方法
- 本身定義一個腳本批量導入數據
- fixtures Django serialization -> model 保存
- python3 manage.py dumpdata > data.json
- python3 manage.py loaddata data.json
- 經過數據庫客戶端或則source文件導入數據
- 導出數據
- python3 manage.py dumpdata > data.json
- pycharm 導出
- mysqldump 導出
- 數據操做
- 返回QuerySet 的 API
- all(),filter(),order_by(),exclude(),reverse(),distinct()
- extra(),defer(),only() 實現字段別名,排除一些字段,選擇一些字段
- values(),values_list() 獲取字典或者元組形式的結果集
- dates(),datetimes() 根據時間日期獲取查詢集
- union(),intersection(),difference() 並集,交集,差集;MySQL Innodb 只支持並集
- select_related() 一對1、多對一查詢優化,prefetch_related() 一對多、多對多查詢優化。 反向查詢
- annotate() 使用聚合計數,求和,平均數,raw() 執行原生SQL
annotate()對分組後的結果進行統計
- Model.objects.get().子表的表名 _set.all()
- 不返回QuerySet 的 API
- 獲取對象 get(),get_or_create(),first(),last(),latest(),earliest(),in_bulk()
- 建立對象 create(),bulk_create(),create_or_update() 建立,批量建立,建立或更新
- 更新對象 update(),update_or_create() 更新,更新或建立
- 刪除對象 delete() 使用filter 過濾
- 其它操做 exists(),count(),aggregate() 判斷是否存在,統計個數,聚合
aggregate() 是對這個數據表中的數據進行統計
- 自定義聚合查詢
- F對象和Q對象
- F對象:操做字段的數據
- Q對象:結合 AND , OR ,NOT, | , ~ , & 實現複雜的查詢
注: 本文知識點是根據本身的項目經驗及慕課網的教學視頻整理所得,
如需轉載請註明出處:http://www.javashuo.com/article/p-srwzpqam-hz.htmlhtml