日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2025/3/16 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)容,希望文章能夠幫你解決所遇到的問題。

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