一.聚合函数
    from django.db.models import Avg,Sum,Max,Min,Count,F,Q   #导入
    # .查询图书的总价,平均价,最大价,最小价
    # ret=Books.objects.aggregate(Avg('price'),Min('price'),Max('price'),Sum('price'))
    # print(ret)
    二.分组查询:以谁group by 就以谁为基表
    # 查询名字叫lqz作者书的总价格
    # Zuozhe.objects.filter(name='lqz').annotate(c=Sum('books__price')).values('name','c')
    # 查询所有作者写的书的总价格大于30
    # Zuozhe.objects.annotate(c=Sum('books__price')).filter(c__gt=30).values('name','c')
 # Zuozhe.objects.values('pk').annotate(c=Sum('books__price')).filter(c__gt=30).values('name','c')
  终极总结:
     values在前,表示group by,在后,表示取值(默认pk/id 省略)
     filter在前,表示过滤(where),在后,表示having(对分组之后的结果再进行过滤)
     三.F,Q(与& ,或 | ,非 ~)查询
 
    # 查询评论数大于阅读数的书籍名
    # ret=Books.objects.filter(p__gt=F('r')).values('name')
    # print(ret)
    # 把python这本书的阅读数减5
    # Books.objects.filter(name='python').update(r=F('r')-5)
 
    # a.查询作者名字是lqz或者名字是egon的书
    # Books.objects.filter(Q(name='lqz')|Q(name='egon'))
    # b.查询作者不是lqz的书
    # Books.objects.filter(~Q(name='lqz'))
    # Books.objects.exclude(name='lqz')
    # c.构建很复杂的逻辑,需要用括号来区分
    # 查询名字为红楼梦或者价格大于20并且id大于2的书籍
    r1=Books.objects.filter((Q(name='红楼梦')|Q(price__gt=20))&Q(pk__gt=2) ).values('name')
    r2=Books.objects.filter((Q(name='红楼梦')|Q(price__gt=20)),pk__gt=2 ).values('name')
    r3=Books.objects.filter((Q(name='红楼梦')|Q(price__gt=20)),Q(pk__gt=2) ).values('name')
    print(r1)
    print(r2)
    print(r3)
    四.字段类型,字段参数
 #常用字段:必须记住,非常用字段,了解即可https://www.cnblogs.com/liuqingzheng/articles/9627915.html
    # 字段
  常用
  AutoField
  IntegerField
  CharField
  DateField
  DateTimeField
  TextField
  EmailField
  FilePathField
  FileField
  ImageField
  'AutoField': 'integer AUTO_INCREMENT',
  'BigAutoField': 'bigint AUTO_INCREMENT',
  'BinaryField': 'longblob',
  'BooleanField': 'bool',
  'CharField': 'varchar(%(max_length)s)',
  'CommaSeparatedIntegerField': 'varchar(%(max_length)s)',
  'DateField': 'date',
  'DateTimeField': 'datetime',
  'DecimalField': 'numeric(%(max_digits)s, %(decimal_places)s)',
  'DurationField': 'bigint',
  'FileField': 'varchar(%(max_length)s)',
  'FilePathField': 'varchar(%(max_length)s)',
  'FloatField': 'double precision',
  'IntegerField': 'integer',
  'BigIntegerField': 'bigint',
  'IPAddressField': 'char(15)',
  'GenericIPAddressField': 'char(39)',
  'NullBooleanField': 'bool',
  'OneToOneField': 'integer',
  'PositiveIntegerField': 'integer UNSIGNED',
  'PositiveSmallIntegerField': 'smallint UNSIGNED',
  'SlugField': 'varchar(%(max_length)s)',
  'SmallIntegerField': 'smallint',
  'TextField': 'longtext',
  'TimeField': 'time',
  'UUIDField': 'char(32)',
 #字段参数
  orm通用字段参数:
  -null  可以为空
  -unique  唯一性约束
  -default 默认值
  -db_index 为该字段建索引
  -只给日期类型和时间类型用
   -auto_now_add    新增数据时,默认把当前时间存入
   -auto_now        修改的时候,默认把当前时间存入
  关系字段
  ForeignKey
   -to  关联哪个表
   -to_field 关联的字段
   -related_name 反向操作时,使用的字段名,用于代替原反向查询时的'表名_set'。(一般不要用)
   -related_query_name :基于双下划线的反向查询之前按表名小写(一般不要用)
   -on_delete:models.CASCADE,models.SET_NULL
   -db_constraint:db_constraint=False代表,不做外键关联

随机推荐

  1. canvas.drawImage()方法详解

    首先看html5.js /**@param {Element} img_elem@param {Number} dx_or_sx@param {Number} dy_or_sy@param {Numb ...

  2. canvas加载图片需要二次刷新的问题

    如题:此问题我也经在百度问问上进行了解答.https://zhidao.baidu.com/question/1048045241465845579.html 好吧,难怪现在百度那么坑人,理论水军专家 ...

  3. jQuery中获取a标签的值

    如题,一组相同action的a标签,不同的是a标签的内容为搜索内容.点击页面显示不同的数据 刚开始试过在 a标签中添加 value值 和id 的值,结果在jQuery中获取值均失败! 后来发现,根本不 ...

  4. Java高并发秒杀API之web层

    第1章 设计Restful接口 1.1前端交互流程设计 1.2 学习Restful接口设计 什么是Restful?它就是一种优雅的URI表述方式,用来设计我们资源的访问URL.通过这个URL的设计,我 ...

  5. 算法实践——舞蹈链(Dancing Links)算法求解数独

    在“跳跃的舞者,舞蹈链(Dancing Links)算法——求解精确覆盖问题”一文中介绍了舞蹈链(Dancing Links)算法求解精确覆盖问题. 本文介绍该算法的实际运用,利用舞蹈链(Dancin ...

  6. python学习路线--从入门到入土

    入门技术博客 进阶自己挑选 入门基础 Python入门相对容易又可以干很多事(网站,运维,数据,爬虫等),是一门方便的工具语言.2016年TIOBE排名显示Python已经名列第四,成为脚本语言之首. ...

  7. [译]MediatR, FluentValidation, and Ninject using Decorators

    原文 CQRS 我是CQRS模式的粉丝.对我来说CQRS能让我有更优雅的实现.它同样也有一些缺点:通常需要更多的类,workflow不总是清晰的. MediatR MediatR的文档非常不错,在这就 ...

  8. 【bzoj 2588】Spoj 10628. Count on a tree

    Description 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中lastans是上一个询问的答案,初始 ...

  9. 关于Java 实现抽象类的抽象方法的特性的利用---面向切面

    今天看工作看代码突然有了以下设想: /** * Created by zq on 2017/5/25. * 抽象类 */ public abstract class AbstractC { publi ...

  10. Spark Streaming连接Kafka的两种方式 direct 跟receiver 方式接收数据的区别

    Receiver是使用Kafka的高层次Consumer API来实现的. Receiver从Kafka中获取的数据都是存储在Spark Executor的内存中的,然后Spark Streaming ...