今日内容:
 
 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')
 2 聚合查询
    -聚合函数
       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查询

    -F为了字段=后面的值,不能放字段,所以用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的更多相关文章

  1. day73 Django框架之URL

    Django框架之url路由层一 Django数据库的一对多与多对多表的建立 一对多  publish_id的建立:publish=models.ForeignKey(to='Publish', to ...

  2. day73 中间件 以及模板引擎

    模板引擎: 基本实用{{k1}}  if for 模板中自定义函数:操作步骤 1在已经注册的App中创建一个名字叫templates文件夹 2任意创建一个py文件, 3创建名字叫register 的L ...

  3. python 全栈开发,Day73(django多表添加,基于对象的跨表查询)

    昨日内容回顾 多表方案: 如何确定表关系呢? 表关系是在2张表之间建立的,没有超过2个表的情况. 那么相互之间有2条关系线,先来判断一对多的关系. 如果其中一张表的记录能够对应另外一张表的多条记录,那 ...

  4. day73 母版 中间件

    关于母版自定义的问题 模板引擎: 基本实用{{k1}}  if  for  在页面传参数 并判断  通过母版进行交互 一 模板中自定义函数:操作步骤 1在已经注册的App中创建一个名字叫templat ...

  5. day73 bbs项目☞基本功能实现

    目录 一.登录功能 二.首页搭建 三.admin后台管理 四.图片防盗链 五.个人站点展示 一.登录功能 views.py 0难度,都是基本操作,要熟悉auth模块的使用 # 登录功能 def log ...

  6. day73:drf:drf视图相关类&路由Routers&创建虚拟环境

    目录 1.APIView 2.GenericAPIView:通用视图类 3.5个视图扩展类:ListModelMixin,CreateModelMixin,RetrieveModelMixin,Upd ...

  7. C++windows内核编程笔记day09_day10,对话框和窗体基本控件等的使用

    //设置字体颜色 SetTextColor(hdc,RGB(255,0,0)); //窗体背景 //wce.hbrBackground=(HBRUSH)(COLOR_WINDOW+1); //wce. ...

  8. python CSRF跨站请求伪造

    python CSRF跨站请求伪造 <!DOCTYPE html> <html lang="en"> <head> <meta chars ...

  9. 100 天从 Python 新手到大师

    Python应用领域和就业形势分析 简单的说,Python是一个“优雅”.“明确”.“简单”的编程语言. 学习曲线低,非专业人士也能上手 开源系统,拥有强大的生态圈 解释型语言,完美的平台可移植性 支 ...

随机推荐

  1. python学习之老男孩python全栈第九期_day014作业

    0. 默写a. 生成器函数获取移动平均值例子: def init(func): def inner(*args,**kwargs): ret = func(*args,**kwargs) ret.__ ...

  2. js实现字体闪烁

    function changeColor(){ var color="#f00|#0f0|#00f|#880|#808|#088|yellow|green|blue|gray"; ...

  3. webstorm激活

    选择 License server http://idea.imsxm.com/ http://idea.iteblog.com/key.php (2016.11.16) http://v2mc.ne ...

  4. Chrome Extension 实战

    想起个问题,线上项目js要有bug,怎么进行调试修改. ------------- 想起来,方法应该是,拦截线上的js的请求,转到本地代码上进行调试... ------------- 网上看到 Chr ...

  5. HBase安装与应用

    1.  参考说明 参考文档: https://hbase.apache.org/book.html 2.  安装环境说明 2.1.  环境说明 CentOS7.4+ Hadoop2.7.5的伪分布式环 ...

  6. Mockjs 前端接口数据模拟

    在前后端分离的项目中,通常需要启动一个后台服务器来配合前端项目的接口需求.Mockjs的作用是拦截ajax请求并模拟各种数据返回,让前端开发可以更加自由独立. 安装 npm install mockj ...

  7. python 使用else代替状态变量

    翻看公司的代码文档,在代码风格文档中,写着:为了提高代码的可维护性,代码中减少flag这类状态变量的使用.这个问题,平时确实没有想过,面对这种需求时,第一反应就是使用flag标记状态.那么使用什么样的 ...

  8. Sql2008R2的一个补丁BUG-大家使用时请注意

    我们都知道Sqlserver为了提高并发,允许乐观隔离级别(读提交快照,快照)以便读与写之间不阻塞.这里有一个在Sqlserver2008R2 SP2 的热补丁(CU11)下RCSI(读提交快照)隔离 ...

  9. jboss eap6.1(1)

    最近决定把公司的项目从jboss3.x迁移出来,先试着摸索一下最新的jboss服务器,从jboss官网上下了一份jboss-eap-6.1,然后找资料准备学习,同时将此次迁移过程记录下来,以备后续复习 ...

  10. 15 Top Paying IT Certifications In 2016: AWS Certified Solutions Architect Leads At $125K

    Each of the five Amazon Web Services (AWS) certifications brings in an average salary of more than $ ...