級聯刪除: on_delete = modle.CASCADEpython
models.Book.objects.filter(**kwargs): querySet [obj1,obj2]
models.Book.objects.filter(**kwargs).values(*args) : querySet [{},{},{}]
models.Book.objects.filter(**kwargs).values_list(title) : querySet [(),(),()]linux
一、建立表sql
class Book(models.Model):
title = models.CharField(max_length=32)
publish=models.ForeignKey("Publish") # 建立一對多的外鍵字段
authorList=models.ManyToManyField("Author") # 多對多的關係,自動建立關係表
class Publish(models.Model):
name = models.CharField(max_length=32)
addr = models.CharField(max_length=32)
class Author(models.Model):
name=models.CharField(max_length=32)
age=models.IntegerField()
ad=models.models.OneToOneField("AuthorDetail") #建立一對一的關係
class AuthorDetail(models.Model):
tel=models.IntegerField()
if 一對多查詢(Book--Publish):
正向查詢,按字段:
book_obj.publish : 與這本書關聯的出版社對象 book_obj.publish.addr: 與這本書關聯的出版社的地址
反向查詢,按表名_set
publish_obj.book_set: 與這個出版社關聯的書籍對象集合 publish_obj.book_set.all() :[obj1,obj2,....]
if 一對一查詢(Author---AuthorDetail):
正向查詢,按字段:
author_obj.ad : 與這個做者關聯的做者詳細信息對象
反向查詢:按表名:
author_detail_obj.author : 與這個做者詳細對象關聯的做者對象
if 多對多(Book----Author):函數
正向查詢,按字段:
book_obj.authorList.all(): 與這本書關聯的全部這做者對象的集合 [obj1,obj2,....]spa
book_obj.authorList.all().values("name"): 若是想查單個值的時候能夠這樣查
反向查詢,按表名_set:
author_obj.book_set.all() : 與這個做者關聯的全部書籍對象的集合code
book_obj.book_set.all().values("name"): 若是想查單個值的時候能夠這樣查對象
f 一對多查詢(Book--Publish):
正向查詢,按字段:blog
# 查詢linux這本書的出版社的名字: models.Book.objects.all().filter(title="linux").values("publish__name")
反向查詢:按表名:it
# 查詢人民出版社出版過的全部書籍的名字 models.Publish.objects.filter(name="人民出版社出版").values("book__title")
if 一對一查詢(Author---AuthorDetail):
正向查詢,按字段:class
#查詢egon的手機號 models.Author.objects.filter(name="egon").values("ad__tel")
反向查詢:按表名:
#查詢手機號是151的做者 models.AuthorDetail.objects.filter(tel="151").values("author__name")
if 多對多(Book----Author):
正向查詢,按字段:
#查詢python這本書的做者的名字 models.Book.objects.filter(title="python").values("authorList__name") [{},{},{},{}]
正向查詢,按表名:
#查詢alex出版過的出的價格 models.Author.objects.filter(name="alex").values("book__price")
publish=models.ForeignKey("Publish",related_name="bookList")
authorlist=models.ManyToManyField("Author",related_name="bookList")
ad=models.models.OneToOneField("AuthorDetail",related_name="authorInfo")
反向查詢的時候都用:related_name的值
聚合查詢:
querySet().aggregate(聚合函數)------返回的是一個字典,再也不是一個querySet
Book.objects.all().aggregate(average_price=Avg('price'))
分組查詢:
querySet().annotate() --- 返回的是querySet
#統計每個出版社中最便宜的書籍的價格
sql: select Min(price) from book group by publish_id; ORM: models.Book.objects.values("publish__name").annotate(Min("price"))