Django模型层(models.py)之多表操作
添加表记录
一对多:
# 方式1:publish_obj = Publish.objects.get(id=1)Book.objects.create(name='2号图书',price=200,publishs=publish_obj)# 方式2:Book.objects.create(name='3号图书',price=300,publish_id=1)
多对多:
book_obj = Book.objects.filter(name='2号图书').first()author1_obj = Author.objects.get(name='1号作者')author2_obj = Author.objects.get(name='2号作者')book_obj.authors.add(author1_obj,author2_obj)
查询表记录
- 方式1:基于对象
- 方式2:基于双下划线
一对一:
# 反向查询# 方式1:author_detail_list = AuthorDetail.objects.filter(addr='地址')for obj in author_detail_list:print(obj.author.name)# 方式2:AuthorDetail.objects.filter(author__name='2号作者').values("addr")# 正向查询# 方式1:Author.objects.filter(name='1号作者').first().authordetail.addr# 方式2:Author.objects.filter(name='1号作者').values("authordetail__addr")
一对多:
# 正向查询(按字段)
# 方式1:
# 查询1号图书的出版社名字
Book.objects.filter(id=1).first().publishs.name
# 方式2:
# 查询1号图书的出版社名字和地址
Book.objects.filter(id=1).values_list("publishs__name","publishs__addr")# 反向查询(按表名:表名_set)
# 方式1:
# 查询1号出版社出版的所有书籍
Publish.objects.get(name='1号出版社').book_set.all()
# 方式2:
# 查询1号图书的出版社的名字和地址
Publish.objects.filter(book__id = 1).values_list("name","addr")
多对多:
同一对多
聚合查询:
aggregate(*args, **kwargs)
返回一个字典,键为聚合值的标识符,可以自由指定,也可以不指定
example:
# 不指定键
Book.objects.all().aggregate(Avg("price"))
# 指定键
Book.objects.all().aggregate(price_avg = Avg("price"))
分组查询:
example:
# 单表# ret = Book.objects.values("price").annotate(Count("id"))# 多表ret = AuthorDetail.objects.values("addr").annotate(c = Count("author")).values("addr","c")# 多表分组等同于join关联表,再分组查询
F查询:
进行字段值之间的比较,支持对象与常数之间,对象与对象之间的加减乘除和取模运算。
example:
from django.db.models import F
# 查询阅读数量大于浏览数量的
Book.objects.filter(readNum__lt=F('scanNum'))
Q查询:
支持与、或、非及其它复杂查询,可以与关键字参数一起使用,但Q对象要放在前面
example:
from django.db.models import Q
Book.objects.filter(Q(authors__name="2号作者")|Q(authors__name="1号作者"))
转载于:https://www.cnblogs.com/shannen/p/11285154.html
Django模型层(models.py)之多表操作相关推荐
- 54 Django 模型层(1) 单表查询
单表操作: 一 项目的操作顺序: 1 在model.py文件中创建表结构 class Book(models.Model): id=models.AutoField(primary_key=True) ...
- 3.1.8 Django模型层详细应用
在这里肯定有小伙伴会说,前面不是已经引用了模型层了吗?并且在模型层中完成了数据库的操作了呀,为什么还要讲模型层? 首先呢,前面属于我们最传统的处理方式,那种方式过于麻烦,无法很好处理数据.模型层真正应 ...
- python代码函数字符查询宝典书籍_Django基础五之django模型层(一)单表操作
二 单表操作 一.创建表 创建模型 创建名为book的app,在book下的models.py中创建模型: from django.db importmodels#Create your models ...
- Django基础五之Django模型层(二)多表操作
Django基础五之Django模型层(二)多表操作 一 创建模型 表和表之间的关系 一对一.多对一.多对多 # 作者表 比较常用的信息放在这个表中 class Author(models.Model ...
- Django 模型层(models) 复杂查询详解
Django 模型层(models) 复杂查询详解 一般Django orm 和原生sql混合使用 1.测试文件 只单独测试django中的某一个py文件 不一定是tests.py 1.配置 在任意一 ...
- django 使用原生SQL语句反向生成MODELS.PY中的表结构
在一次工作中,有这么一个问题,就是要导入的数据字段不确定,但是还想使用django的ORM来对数据进行操作.. 琢磨了许久,弄个不完善的方案,但功能是能实现的,主要是思路.废话不多说了,丑陋的展示一下 ...
- Web开发-Django模型层
Django模型层 简述 Django框架处理业务的逻辑一般如下(省略图,源于网络,侵删) 可以看到,Django自带了一套ORM机制,这也是Django框架的核心-"全面",将一 ...
- Django–模型层orm查询
文章目录 Django–模型层orm查询 一.单表查询(增.删.改.查) 基本查询 下划线查询 二.外键字段(增.删.改.查) 一对多 多对多 三.多表查询 多表查询的方式 正反向的概念 基于对象的跨 ...
- 第三百零九节,Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、并且——queryset对象序列化...
第三百零九节,Django框架,models.py模块,数据库操作--F()和Q()运算符:|或者.&并且 F()可以将数据库里的数字类型的数据,转换为可以数字类型 首先要导入 from dj ...
最新文章
- linux-glibc内存管理小结2(内存相关系统调用的实现)
- 网站安全测试工具GoLismero
- ios tableview分组间距
- 毕业后五年拉开差距的原因在哪里
- 【数据结构与算法】之深入解析“旋转链表”的求解思路与算法示例
- 3.1 go context代码示例
- json php 数组读写,PHP如何将数据写入JSON?
- zblog广告小小插件 - ZblogPHP插件
- PHP中||与or的区别
- php 5.4.5,PHP 5.4.5 和 5.3.15 发布
- 我们为什么要使用NodeJS
- springboot整合mysql数据库_springBoot 集成Mysql数据库
- 01 Python pikepdf 解锁带有密码的PDF文件
- html 媒体查询改变字体,CSS----媒体查询设置根节点字体大小
- 由加速度计解算得到姿态角
- 使用Pyton将MAC地址转换成指定格式
- APMServ启动失败解决方法
- 为你的个人博客添加访客地图
- Spring注解开发学习笔记
- Microsoft公司 .CAB文件格式