ORM映射(對象關系映射)
分創建表和操作表兩個部分
創建單表
創建關聯表(foreignKey)
一對一
一對多(重點)
多對多(重點)
創建表后加str方法把打印的地址轉換成對應字符
表的操作(增刪改查):
1.增(create,save)
from app01.modals import *
create方式一:Author.objects.create(name="eric")
create方式二:Author.objects.create(*{"name":"eric"})
save方式一:author = Author(name="eric")
author.save()
save方式二:author=Author()
author.name="eric"
author.save()
2.刪(delete)
Book.object.filter(id=1).delete()
(3,{'app01.Book_authors':2,'app01.Book':1})
3.改(update,save)
update直接改:Publisher.objects.filter(id=2).update(name='eric')
save相當於重新賦值:author=Author.object.get(id=5)
author.name='eric'
author.save()
4.查(filte,value等)
查詢API:54-02
filter:(**kwargs) :它包含了與所給篩選條件相匹配的對象
all():查詢所有結果
get(**kwargs):返回與所給篩選條件匹配的對象,返回結果有且只有一個,如果符合篩選條件的對象超過一個或者沒有都會
拋出錯誤。
對查詢結果進行處理:
values(**kwargs):返回一個ValueQuerySet 一個特殊的QuerySet,運行后得到的並不是一系列model的實例化對象,而
是一個可迭代的字典序列
exclude(**kwargs):它包含了與所給篩選條件不匹配的對象
order_by(*field):對查詢結果排序
reverse():對查詢結果反向排序
distinct():從返回結果中剔除重復記錄
values_list(*field):它與values()非常相似,它返回的是一個元組序列,values返回的是一個字典序列
count():返回數據庫中匹配查詢(QuerySet)的對象數量。
fist():返回第一條記錄
last():返回最后一條記錄
exists():如果QuerySet包含數據就返回True,否則就返回False
惰性機制:
1.可迭代
2.可切片
5.重點:如何創建存在一對多或多對多關系一本書的信息呢?(如何處理外鍵關系的字段如一對多的publisher和
多對多的authors)
一對一(OneToOne):
一對多(foreignKey):
插入(1)models.Book.object.create(title="Python",publish_id=2)
(2)推薦使用:
models.Book.object.create(title="Python",publish=obj)
由於綁定一對多的字段,比如publlish_id
多對多(通過外鍵和方法自動創建第三張表):model.manytomanyfield()
自動創建第三張表:
add()綁定關系
remove()解除關系
----正向查詢(例子是從2開始建立的正向查詢)
book=models.Book.objects.filter(id=2)[0] #獲取id=2時的參數值
authors=models.Author.objects.filter(id__gt=2) #大於2
book.author.add(*authors)
book.author.remove(*authors) #移除關系
----反向查詢 (例子是從3開始到2建立的反向查詢)
author=models.Author.objects.filter(id=3)[0]
books=models.Book.objects.filter(id__gt=2)
author.book_set.add(*books)
author.book_set.remove(*books) #移除關系
非自動創建第三張表(手動):
手動建表可以直接插入數據
聯合唯一:unique_together=['字段','字段']
控制台執行數據庫操作:
python manage.py makemigrations
python manage.py migrate
注:第三張表的刪除會出現級聯刪除情況,update()方法要用集合對象才能調用
manytomany():通過兩個foreignKey
緩存時用iterator()方法把對象封裝成可迭代對象