model.py
from django.db importmodels
#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)
(book_obj.publish.city)
#2、(反向查詢)查詢 蘋果出版社 出版的所有書籍的名字(反向查詢按表名小寫)
#「要查詢的表_set」 就是反向查詢所要查詢的關聯表資料
publish_obj=publish.objects.get(name="
蘋果出版社")
(publish_obj.city)
book_list=publish_obj.book_set.all()
(book_list)
for item in
book_list:
(item.title)
'''一(作者)對一(作者詳情)查詢
'''#
1、反向查詢 查詢所有住址在北京的作者的姓名(通過authordetail去查詢author表)
author_detail_list=authordetail.objects.filter(addr="北京"
).all()
(author_detail_list)
for item in
author_detail_list:
(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
(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 聯絡。要做跨關係查...