Python-Django 模型层-多表查询-2

时间:2024-12-09 08:06:19

-related_name:基于双下划线的跨表查询,修改反向查询的字段

-related_query_name:基于对象的跨表查询,修改反向查询字段

publish = ForeignKey(Blog, related_name='bookList')
Python-Django 模型层-多表查询-2
# 练习: 查询人民出版社出版过的所有书籍的名字与价格(一对多)

# 反向查询 不再按表名:book,而是related_name:bookList

    queryResult=Publish.objects
              .filter(name="人民出版社")
              .values_list("bookList__title","bookList__price")

-聚合查询:(聚合函数的使用)aggregate

from django.db.models import Count,Max,Min,Avg,Sum
ret=models.Book.objects.all().aggregate(aa=Avg('price'))

Python-Django 模型层-多表查询-2

-分组查询annotate
#终极总结

group by 谁,就以谁做基表
values在前:表示group by
values在后:取值
filter在前:表示where条件
filter在后: 表示having

Python-Django 模型层-多表查询-2

-F和Q查询

F查询干什么用? 取出数据库中某个字段的值,然后进行运算
Q查询是干什么用的?表示出或 与 非 的情况,用的最多的是或的情况

Python-Django 模型层-多表查询-2

-在实际开发中,外键通常不用

-约束性太强
-查询效率会变低
-db_constraint=False orm创建表的时候,外键就没了

Python-Django 模型层-多表查询-2

-建外键约束,包括unique,都是为了不写脏数据

TTL

-related_name:基于双下划线的跨表查询,修改反向查询的字段
-related_query_name:基于对象的跨表查询,修改反向查询字段

-聚合查询
-aggregate(聚合函数)
-分组查询:
'''
gruop by 谁就以谁做基表
filter在前,表示where条件
filter在后,表示havaing
values在前,表示group by的字段
values在后,表示取值
'''

Python-Django 模型层-多表查询-2

F和Q查询
-F:取出数据库某个字段的值

Q:构造出与(&)或(|)非(~)得关系

图书管理系统:
Python-Django 模型层-多表查询-2

Python-Django 模型层-多表查询-2