日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

Django模型层(models.py)之多表操作

發(fā)布時(shí)間:2025/3/16 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django模型层(models.py)之多表操作 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

添加表記錄

一對(duì)多:

# 方式1:publish_obj = Publish.objects.get(id=1)Book.objects.create(name='2號(hào)圖書(shū)',price=200,publishs=publish_obj)# 方式2:Book.objects.create(name='3號(hào)圖書(shū)',price=300,publish_id=1)

?多對(duì)多:

book_obj = Book.objects.filter(name='2號(hào)圖書(shū)').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)圖書(shū)的出版社名字 Book.objects.filter(id=1).first().publishs.name # 方式2: # 查詢1號(hào)圖書(shū)的出版社名字和地址 Book.objects.filter(id=1).values_list("publishs__name","publishs__addr")# 反向查詢(按表名:表名_set) # 方式1: # 查詢1號(hào)出版社出版的所有書(shū)籍 Publish.objects.get(name='1號(hào)出版社').book_set.all() # 方式2: # 查詢1號(hào)圖書(shū)的出版社的名字和地址 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)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。