基於物件的orm跨表查詢再練習

2022-07-21 23:57:16 字數 3478 閱讀 2745

model.py

from django.db import

models

#create your models here.

class

book(models.model):

nid = models.autofield(primary_key=true)

title = models.charfield(max_length=64)

publishdate =models.datefield()

price = models.decimalfield(max_digits=5, decimal_places=2)

publish = models.foreignkey(to="

publish

", to_field="

nid", on_delete=models.cascade)

authors = models.manytomanyfield(to="

author")

class

author(models.model):

nid = models.autofield(primary_key=true)

name = models.charfield(max_length=32)

age =models.integerfield()

#作者和作者資訊一對一

authordetail=models.onetoonefield(to="

authordetail

",on_delete=models.cascade)

class

authordetail(models.model):

nid = models.autofield(primary_key=true)

#birthday = models.datefield() 如果報錯 python int too large to convert to c long 則登出這行

'''一(出版社)對多(書籍) 查詢

'''#

1、(正向查詢按欄位) 查詢主鍵為1的書籍的出版社所在的城市

book_obj=book.objects.get(pk=1)

print

(book_obj.publish.city)

#2、(反向查詢)查詢 蘋果出版社 出版的所有書籍的名字(反向查詢按表名小寫)

#「要查詢的表_set」 就是反向查詢所要查詢的關聯表資料

publish_obj=publish.objects.get(name="

蘋果出版社")

print

(publish_obj.city)

book_list=publish_obj.book_set.all()

print

(book_list)

for item in

book_list:

print

(item.title)

'''一(作者)對一(作者詳情)查詢

'''#

1、反向查詢 查詢所有住址在北京的作者的姓名(通過authordetail去查詢author表)

author_detail_list=authordetail.objects.filter(addr="北京"

).all()

print

(author_detail_list)

for item in

author_detail_list:

print

(item.author.name)

#2、正向查詢 查詢作者為tom的位址在**?

author_obj=author.objects.get(name="

tom"

)

print(author_obj) #

author object (1)

print(author_obj.authordetail) #

authordetail object (1)

print(author_obj.authordetail.addr) #

北京'''

多(author)對多(book)查詢

'''#

正向查詢

#1、追風箏的人 所有作者的名字以及手機號

book_obj=book.objects.get(title="

追風箏的人")

print(book_obj) #

book object (3)

author_list=book_obj.authors.all()

print(author_list) #

, ]>

for author_obj in

author_list:

print(author_obj) #

author object

print

(author_obj.name)

print(author_obj.authordetail.addr) #

再跨一張authordetail表

#2、反向查詢 查詢tom出過的所有書籍的名字

基於物件的跨表查詢

正向查詢 按欄位 publish 查詢主鍵為1的書籍的出版社所在的城市 book obj book.objects.filter pk 1 first book obj.publish 是主鍵為1的書籍物件關聯的出版社物件 print book obj.publish.city 反向查詢 按表名 b...

ORM跨表查詢總結

一 基於物件的查詢 子查詢 1 一對多 正向查詢 基於 字段 反向查詢 基於 表名 set.all 注意 表名全部小寫 2 多對多 正向查詢 基於 欄位.all 反向查詢 基於 表名 set.all 注意 表名全部小寫 3 一對一 正向查詢 基於 字段 反向查詢 基於 表名 注意 表名全部小寫 二 ...

ORM多表操作 之 基於雙下劃線的跨表查詢

目錄 1.基於雙下劃線 2.模型介紹 3.模型建立 4.新增資料 5.例項演示 一對多多對多 一對一高階練習 基於雙下劃線的跨表查詢也就是sql中的join 連表 查詢 django 提供了一種直觀而高效的方式在查詢 lookups 中表示關聯關係,它能自動確認 sql join 聯絡。要做跨關係查...