django多表操作2(代码片段)

layerluo layerluo     2023-01-19     621

关键词:

创建表模型和多表操作1一样

基于双下划线的一对多查询

#查询出版社为北京出版社出版的所有图书的名字,价格
    ret=Publish.objects.filter(name=‘北京出版社‘).values(‘book__name‘,‘book__price‘)
    print(ret)
    ret=Book.objects.filter(publish__name=‘北京出版社‘).values(‘name‘,‘price‘)
    print(ret)
#查询北京出版社出版的价格大于19的书
    ret=Publish.objects.filter(name=‘北京出版社‘,book__price__gt=19).values(‘book__name‘,‘book__price‘)
    print(ret)

基于双下划线的多对多查询

#查询红楼梦的所有作者名字
ret=Book.objects.filter(name=‘红楼梦‘).values(‘authors__name‘)
print(ret)
ret=Author.objects.filter(book__name=‘红楼梦‘).values(‘name‘)
print(ret)
#查询图书价格大于30的所有作者名字
ret=Book.objects.filter(price__gt=30).values(‘authors__name‘)
print(ret)

基于双下划线的连续跨表查询

#查询北京出版社出版过的所有书籍的名字以及作者的姓名
ret=Publish.objects.filter(name=‘北京出版社‘).values(‘book__name‘,‘book__authors__name‘)
print(ret)
ret=Book.objects.filter(publish__name=‘北京出版社‘).values(‘name‘,‘authors__name‘)
print(ret)
#手机号以151开头的作者出版过的所有书籍名称以及出版社名称
ret=AuthorDetail.objects.filter(phone__startswith=‘13‘).values(‘author__book__name‘,‘author__book__publish__name‘)
print(ret)
ret=Book.objects.filter(authors__authordetail__phone__startswith=‘13‘).values(‘name‘,‘publish__name‘)
print(ret)

聚合查询aggregate

from django.db.models import Avg,Count,Max,Min,Sum
#计算所有图书的平均价格
ret=Book.objects.all().aggregate(Avg(‘price‘))
print(ret)
#计算图书的最高价格
ret=Book.objects.all().aggregate(Max(‘price‘))
print(ret)
#aggregate是queryset的终止子句
#计算图书的最高价格,最低价格,平均价格,总价
ret=Book.objects.all().aggregate(Max(‘price‘),Min(‘price‘),Avg(‘price‘),Sum(‘price‘))
print(ret)

分组查询annotate

#统计每一本书作者个数
ret=Book.objects.all().annotate(c=Count(‘authors‘))
print(ret)
for r in ret:
    print(r.name,‘---->‘,r.c)

ret=Book.objects.all().annotate(c=Count(‘authors‘)).values(‘name‘,‘c‘)
print(ret)
#统计每一个出版社的最便宜的书(以谁group by 就以谁为基表)
ret=Publish.objects.all().annotate(m=Min(‘book__price‘)).values(‘name‘,‘m‘)
print(ret)
#统计每一本以py开头的书籍的作者个数
ret1=Book.objects.all().filter(name__startswith=‘py‘).annotate(c=Count(‘authors‘)).values(‘name‘,‘c‘)
print(ret1)

#总结:  group by 谁,就以谁做基表,filter过滤,annotate取分组,values取值
#总结终极版本
#values在前,表示group by 在后,表示取值
#filter在前,表示where条件,在后表示having

#统计每一本以py开头的书籍的作者个数--套用模板
ret2=Book.objects.all().values(‘name‘).filter(name__startswith=‘py‘).annotate(c=Count(‘authors‘)).values(‘name‘,‘c‘)
print(ret2)
#查询各个作者出的书的总价格
ret=Author.objects.all().values(‘name‘).annotate(s=Sum(‘book__price‘)).values(‘name‘,‘s‘)
ret=Author.objects.all().annotate(s=Sum(‘book__price‘)).values(‘name‘,‘s‘)
print(ret)
#查询名字叫lqz作者书的总价格
ret=Author.objects.all().values(‘pk‘).filter(name=‘lqz‘).annotate(s=Sum(‘book__price‘)).values(‘name‘,‘s‘)
print(ret)
#查询所有作者写的书的总价格大于30
ret=Author.objects.all().values(‘pk‘).annotate(s=Sum(‘book__price‘)).filter(s__gt=2).values(‘name‘,‘s‘)
ret=Author.objects.all().annotate(s=Sum(‘book__price‘)).filter(s__gt=30).values(‘name‘,‘s‘)
print(ret)

#总结终极版本
#values在前,表示group by 在后,表示取值
#filter在前,表示where条件,在后表示having

#统计不止一个作者的图书
ret=Book.objects.all().values(‘pk‘).annotate(c=Count(‘authors‘)).filter(c__gt=1).values(‘name‘,‘c‘)
print(ret)
总结: group by 谁,就以谁做基表,filter过滤,annotate取分组,values取值
总结终极版本
values在前,表示group by 在后,表示取值
filter在前,表示where条件,在后表示having

django模型层2多表操作(代码片段)

1.多表操作:  1.创建模型:实例:我们来假定下面这些概念,字段和关系作者模型:一个作者有姓名和年龄。作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息。作者详情模型和作者模型之间是一对... 查看详情

django的多表操作(代码片段)

django的多表操作1.使用场景在实际生产过程多,我们面对的数据纷繁复杂,此时就需要良好的数据结构设计,多表之间的约束关系为我们提供了数据管理以及查询的便利。在MYsql中我们利用外键(foreignkey)来实现这样的约束关系... 查看详情

django框架七(代码片段)

...操作 1.子查询 2.联表操作 innerjoin leftjoin rightjoin unionDjangoorm中 1.基于对象的跨表查询 子查询 1.先拿到一个数据对象 2.对象点点点 2.基于双下划线的跨表查询 联表操作"&q 查看详情

django模型层(多表操作)(代码片段)

创建模型(一)多表查询一对一:models.OneToOneField(to_field=‘id‘,to=‘Authordatil‘)一对多:(外键设置唯一性)models.ForeignKey(to=‘Publish‘,to_field=‘id‘)多对多:自动生成第三张表models.ManyToManyField(to=‘Author‘)(二)创建表模型作... 查看详情

django_多表查询(代码片段)

多表操作1、Django多表ORM设计规则‘‘‘1.关联的表之间建议建立外键,但可以取消关联关系(db_constraint=False)2.关联表之间的外键字段建议采用对应类名的全小写3.采用关联表的主键或对象均能进行操作‘‘‘‘‘‘#书籍Book:idnamepr... 查看详情

django系列:多表操作(代码片段)

1、创建模型例:我们来假定下面这些概念,字段和关系  作者模型:一个作者有姓名和年龄。  作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息。作者详情模型和作者模型之间是一对一(one-t... 查看详情

django模型层之多表操作(代码片段)

一.创建模型实例:作者表:拥有字段:姓名(name),性别(sex),该表与书籍表之间为多对多的关系作者详情表:拥有字段:地址(addr),手机号(phone),该表与作者表之间为一对一的关系出版社表:拥有字段:名字(name),地址(addr),该表与书籍表之间为... 查看详情

django-orm-多表操作(代码片段)

目录一、创建模型二、增删改增加记录删除记录修改记录三、基于对象的跨表查询(子查询)四、基于双下划线的跨表查询(连表join)普通版进阶版五、聚合查询、分组查询、F和Q查询聚合查询分组查询F和Q查询ORM执行原生SQL一... 查看详情

django之多表查询-2(代码片段)

2018-11-14一\基于双下划线的跨表查询:          套路一样,用__跨表-一对多-多对多fromapp.modelsimport*查询出版社为北京出版社出版的所有图书的名字,价格ret=Publish.objects.filter(name=‘北京出版社‘).values(‘book__name‘,‘book_... 查看详情

django06django模型基础2(常用查询和多表关联)(代码片段)

Django06Django模型基础2(常用查询和多表关联)一、常用查询#查找数据defsearch_user(request):#获取rs=User.objects.first()#获取第一条数据rs=User.objects.last()#获取最后一条数据rs=User.objects.filter(name=‘TAKA‘)#获取name为TAKA的数据,返货queryset类... 查看详情

django模型层之多表操作(代码片段)

作者模型:一个作者有姓名和年龄。作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息。作者详情模型和作者模型之间是一对一的关系(one-to-one)出版商模型:出版商有名称,所在城市以及email。书... 查看详情

django之模型层-多表操作(代码片段)

多表操作数据库表关系一对多:两个表之间的关系一旦确定为一对多,必须在数据多的表中创建关联字段多对多:两个表之间的关系一定确定为多对多,必须创建第三张表(关联表)一对一:一旦两个表之间的关系确定为一对一... 查看详情

django模型层:单表多表操作f与q查询(代码片段)

DJango模型层单表操作使用有几步:settings.py中配置连接数据库的地址,端口在init.py中使用pymysql在models.py里写类,一个类对应一个表,写属性数据库迁移命令,第一个命令是纪录,第二个命令才是真正的数据库同步导入models到views... 查看详情

第十二章orm的多表操作(代码片段)

1.多对多操作1.1环境准备#test.pyimportos,djangoos.environ.setdefault(‘DJANGO_SETTINGS_MODULE‘,‘项目名.settings‘)django.setup()fromapp01importmodels#models.pyfromdjango.dbimportmodels#出版社和书的一对多关系classPublisher(mode 查看详情

django之模型层第二篇:多表操作(代码片段)

Django之模型层第二篇:多表操作一表关系回顾?在讲解MySQL时,我们提到,把应用程序的所有数据都放在一张表里是极不合理的。?比如我们开发一个员工管理系统,在数据库里只创建一张员工信息表,该表有四个字段:工号、姓... 查看详情

django之多表查询与多表的使用(代码片段)

1.django的多表查询主要区分为:正向查询  逆向查询1.多表查询:是一个复杂的查询,他分为对象查询和__模糊查询两种方式2.多表查询:又分为一对一查询,一对多查询,多对多查询三种方式3.多表查询:分为正向查询与逆向查询,正... 查看详情

drf多表断表操作(代码片段)

目录settings.pymodels.pyserialiaers.pyviews.pyurls.py案例settings.pyINSTALLED_APPS=[#...‘rest_framework‘,]DATABASES=‘default‘:‘ENGINE‘:‘django.db.backends.mysql‘,‘NAME‘:‘dg_proj‘,‘USER‘:‘root‘,‘PASSWORD 查看详情

django基础五之django模型层多表操作(代码片段)

...是在一对多的约束上加上唯一约束。模型建立如下:fromdjango.dbimportmodels#Createyourmodelshere.classAuthor(models.Model):#比较常用的信息放到这个表里面nid=models.AutoField(primary_key=True)name=models.CharField(max_length=32)age=models.IntegerField()#与AuthorDetail... 查看详情