1. 程式人生 > >Django ORM 知識概要

Django ORM 知識概要

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

注: 本文知識點是根據自己的專案經驗及慕課網的教學視訊整理所得,
如需轉載請註明出處:https://www.cnblogs.com/zhuchenglin/p/10223596.html