day73
1基于双下划线的跨表查询
套路一样,用__跨表
-一对多
# 北京出版社出版的所有图书
res = models.Publish.objects.filter(name='北京出版社').values('book__name')
print(res)
# 三国演义的所有作者
res = models.Book.objects.filter(name='三国演义').values('authors__name')
print(res)
# 跨表改
# 将lay出版的所有书的出版社的邮箱改为987@qq.com
# models.Publish.objects.filter(book__authors__name='lay').update(email='987@qq.com')
-聚合函数
from django.db.models import Avg,Count,Max,Min,Sum
# 计算所有图书的平均价格
from django.db.models import Max,Min,Count,Sum,Avg
# 所有图书的总价
res = models.Book.objects.all().aggregate(s=Sum('price'))
print(res)
# 红楼梦的有多少个作者
res = models.Book.objects.filter(name='红楼梦').aggregate(c=Count('authors'))
print(res)
# 郑棒写的最贵的书
res = models.Author.objects.filter(name='郑棒').aggregate(m=Max('book__price'))
print(res)
# 郑棒出版社出版的最便宜的价格
res = models.Publish.objects.filter(name='郑棒出版社').aggregate(m=Min('book__price'))
print(res)
3分组查询
# 分组查询
# 查询所有出版社的多少书
# res = models.Publish.objects.all().annotate(c=Count('book__name')).values('name','c')
# print(res)
# 统计每一本书作者个数
# res = models.Book.objects.all().annotate(c=Count('authors')).values('name', 'c')
# print(res)
# 统计每一个出版社的最便宜的书
# res = models.Publish.objects.annotate(m=Min('book__price')).values('name', 'm')
# print(res)
# 统计每一本以py开头的书籍的作者个数
# res = models.Book.objects.filter(name__startswith='py').annotate(c=Count('authors')).values('name', 'c')
# print(res)
# 查询各个作者出的书的总价格
# res = models.Author.objects.all().annotate(s=Sum('book__price')).values('name', 's')
# print(res)
终极总结:
values在前,表示group by,在后,表示取值
filter在前,表示过滤(where),在后,表示having(对分组之后的结果再进行过滤)
4 F查询与Q查询
from django.db.models import F, Q
# 查询阅读数大于评论数的图书
res = models.Book.objects.filter(read__gt=F('commit'))
print(res)
# 把所有书的评论数加1
res = models.Book.objects.update(commit=F('commit') + 1)
# 把python这本书的阅读数减5
res = models.Book.objects.filter(name__startswith='py').update(read=F('read') - 5)
# Q函数表示与&,或|,非~
# 查询作者名字不是郑棒或者名字不是徐都会的书
res = models.Book.objects.exclude(Q(authors__name='郑棒')|Q(authors__name='徐都会'))
print(res)
# 查询北京出版社出版的书籍的作者的电话号码,如果电话号码13开头的将作者地址改为北京
res = models.Author.objects.filter(Q(author_details__phone__startswith='13') & Q(book__publish__name='北京出版社')).update(addr='北京')
print(res)
5 常用字段:必须记住,非常用字段,了解即可
6 orm字段参数:
-null 可以为空
-unique 唯一性约束
-default 默认值
-db_index 为该字段建索引
-只给日期类型和时间类型用
-auto_now_add 新增数据时,默认把当前时间存入
-auto_now 修改的时候,默认把当前时间存入
7 关系字段
ForeignKey
-to 关联哪个表
-to_field 关联的字段
-related_name 反向操作时,使用的字段名,用于代替原反向查询时的'表名_set'。(一般不要用)
-related_query_name :基于双下划线的反向查询之前按表名小写(一般不要用)
-on_delete:models.CASCADE,models.SET_NULL
-db_constraint:db_constraint=False代表,不做外键关联
day73的更多相关文章
- day73 Django框架之URL
Django框架之url路由层一 Django数据库的一对多与多对多表的建立 一对多 publish_id的建立:publish=models.ForeignKey(to='Publish', to ...
- day73 中间件 以及模板引擎
模板引擎: 基本实用{{k1}} if for 模板中自定义函数:操作步骤 1在已经注册的App中创建一个名字叫templates文件夹 2任意创建一个py文件, 3创建名字叫register 的L ...
- python 全栈开发,Day73(django多表添加,基于对象的跨表查询)
昨日内容回顾 多表方案: 如何确定表关系呢? 表关系是在2张表之间建立的,没有超过2个表的情况. 那么相互之间有2条关系线,先来判断一对多的关系. 如果其中一张表的记录能够对应另外一张表的多条记录,那 ...
- day73 母版 中间件
关于母版自定义的问题 模板引擎: 基本实用{{k1}} if for 在页面传参数 并判断 通过母版进行交互 一 模板中自定义函数:操作步骤 1在已经注册的App中创建一个名字叫templat ...
- day73 bbs项目☞基本功能实现
目录 一.登录功能 二.首页搭建 三.admin后台管理 四.图片防盗链 五.个人站点展示 一.登录功能 views.py 0难度,都是基本操作,要熟悉auth模块的使用 # 登录功能 def log ...
- day73:drf:drf视图相关类&路由Routers&创建虚拟环境
目录 1.APIView 2.GenericAPIView:通用视图类 3.5个视图扩展类:ListModelMixin,CreateModelMixin,RetrieveModelMixin,Upd ...
- C++windows内核编程笔记day09_day10,对话框和窗体基本控件等的使用
//设置字体颜色 SetTextColor(hdc,RGB(255,0,0)); //窗体背景 //wce.hbrBackground=(HBRUSH)(COLOR_WINDOW+1); //wce. ...
- python CSRF跨站请求伪造
python CSRF跨站请求伪造 <!DOCTYPE html> <html lang="en"> <head> <meta chars ...
- 100 天从 Python 新手到大师
Python应用领域和就业形势分析 简单的说,Python是一个“优雅”.“明确”.“简单”的编程语言. 学习曲线低,非专业人士也能上手 开源系统,拥有强大的生态圈 解释型语言,完美的平台可移植性 支 ...
随机推荐
- vue.js自定义指令详解
写在文本前:相信在做vue的项目,你肯定接触了指令,我们常用vue内置的一些指令,比如v-model,v-text,v-if,v-show等等,但是这些内置指令不在本文的讲解范畴,本文想说的是其自定义 ...
- JS中冒泡排序,选择排序,快速排序
var arr = [1,4,2,9,7,6,5,4,7,5]; // 冒泡排序(通俗的说就是j 和 j+1打,谁赢了谁去后面) for(var i = 1;i<ar ...
- CAT3 SAP tcode - Time Sheet: Display Times
CAT3 SAP tcode - Time Sheet: Display Times CAT3 (Time Sheet: Display Times) is a standard SAP transa ...
- ActiveReports 报表应用教程 (14)---数据可视化
葡萄城ActiveReports报表中提供了丰富的数据可视化解决方案,用户可以将数据以图像化的方式进行显示,让报表数据更加形象且便于理解.在葡萄城ActiveReports报表中提供了大多数常用的二维 ...
- Android--WebView 自适应代码
//WebView自适应代码 private String getHtmlData(String bodyHTML) { String head = "<head>" ...
- Java语言的特点以及Java与C/C++的异同
Java语言的特点 1. Java为纯面向对象的语言,能够直接反应现实生活中的对象,容易理解,编程更容易. 2.跨平台,java是解释性语言,编译器会把java代码变成中间代码,然后在JVM上解释执行 ...
- react+spring 记录跨域问题的解决方法
react 跨域访问后台,默认是有跨域问题,并且火弧和谷歌浏览器,对跨域问题展示还不一样. 谷歌浏览器如下图: 此处状态是200,然而在Response却没有任何信息,如下图 然而火弧浏览器,对该问题 ...
- ionic默认样式android和ios差异
ionicframework中android和ios在默认样式上有一些不同的地方,官方文档中都有说明,但是经常会想不起. 一.差异: 1.tab位置,$ionicConfigProvider, tab ...
- 用JS实现判断iframe是否加载完成
本文出至:新太潮流网络博客 var iframe = document.createElement("iframe"); iframe.src = "blog.iinu. ...
- memcached 查看所有的key
1. cmd上登录memcache 1 > telnet 127.0.0.1 11211 2. 列出所有keys 1 2 3 4 stats items // 这条是命令 STAT it ...