Django模型层(models.py)之多表操作
生活随笔
收集整理的這篇文章主要介紹了
Django模型层(models.py)之多表操作
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
添加表記錄
一對(duì)多:
# 方式1:publish_obj = Publish.objects.get(id=1)Book.objects.create(name='2號(hào)圖書',price=200,publishs=publish_obj)# 方式2:Book.objects.create(name='3號(hào)圖書',price=300,publish_id=1)?多對(duì)多:
book_obj = Book.objects.filter(name='2號(hào)圖書').first()author1_obj = Author.objects.get(name='1號(hào)作者')author2_obj = Author.objects.get(name='2號(hào)作者')book_obj.authors.add(author1_obj,author2_obj)查詢表記錄
- 方式1:基于對(duì)象
- 方式2:基于雙下劃線
一對(duì)一:
# 反向查詢# 方式1:author_detail_list = AuthorDetail.objects.filter(addr='地址')for obj in author_detail_list:print(obj.author.name)# 方式2:AuthorDetail.objects.filter(author__name='2號(hào)作者').values("addr")# 正向查詢# 方式1:Author.objects.filter(name='1號(hào)作者').first().authordetail.addr# 方式2:Author.objects.filter(name='1號(hào)作者').values("authordetail__addr")?一對(duì)多:
# 正向查詢(按字段) # 方式1: # 查詢1號(hào)圖書的出版社名字 Book.objects.filter(id=1).first().publishs.name # 方式2: # 查詢1號(hào)圖書的出版社名字和地址 Book.objects.filter(id=1).values_list("publishs__name","publishs__addr")# 反向查詢(按表名:表名_set) # 方式1: # 查詢1號(hào)出版社出版的所有書籍 Publish.objects.get(name='1號(hào)出版社').book_set.all() # 方式2: # 查詢1號(hào)圖書的出版社的名字和地址 Publish.objects.filter(book__id = 1).values_list("name","addr")多對(duì)多:
? 同一對(duì)多
?聚合查詢:
aggregate(*args,?**kwargs)
返回一個(gè)字典,鍵為聚合值的標(biāo)識(shí)符,可以自由指定,也可以不指定
example:
# 不指定鍵 Book.objects.all().aggregate(Avg("price")) # 指定鍵 Book.objects.all().aggregate(price_avg = Avg("price"))?分組查詢:
example:
# 單表# ret = Book.objects.values("price").annotate(Count("id"))# 多表ret = AuthorDetail.objects.values("addr").annotate(c = Count("author")).values("addr","c")# 多表分組等同于join關(guān)聯(lián)表,再分組查詢?F查詢:
進(jìn)行字段值之間的比較,支持對(duì)象與常數(shù)之間,對(duì)象與對(duì)象之間的加減乘除和取模運(yùn)算。
example:
from django.db.models import F # 查詢閱讀數(shù)量大于瀏覽數(shù)量的 Book.objects.filter(readNum__lt=F('scanNum'))?Q查詢:
支持與、或、非及其它復(fù)雜查詢,可以與關(guān)鍵字參數(shù)一起使用,但Q對(duì)象要放在前面
example:
from django.db.models import Q Book.objects.filter(Q(authors__name="2號(hào)作者")|Q(authors__name="1號(hào)作者"))?
?
轉(zhuǎn)載于:https://www.cnblogs.com/shannen/p/11285154.html
總結(jié)
以上是生活随笔為你收集整理的Django模型层(models.py)之多表操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手把手教你如何免费且光荣地使用专业版In
- 下一篇: pick王菊?作为“菊外人”的程序员能做