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() 一對1、多對一查詢優化,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, | , ~ , & 實現複雜的查詢

注: 本文知識點是根據本身的項目經驗及慕課網的教學視頻整理所得,
如需轉載請註明出處:http://www.javashuo.com/article/p-srwzpqam-hz.htmlhtml

相關文章
相關標籤/搜索