一.聚合函数
    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. 【转】Linux C下非特定波特率的配置和使用

    https://blog.csdn.net/jinhongdu/article/details/43413071  对于非标准的任意波特率需要用ioctl(fd, TIOCGSERIAL,  p)和i ...

  2. 原生JavaScript运动功能系列(四):多物体多值链式运动

    原生JavaScript运动功能系列(一):运动功能剖析与匀速运动实现 原生JavaScript运动功能系列(二):缓冲运动 原生JavaScript运动功能系列(三):多物体多值运动 多物体多值链式 ...

  3. row_number()over()使用

    语法: ROW_NUMBER ( ) OVER ( [ PARTITION BY value_expression , ... [ n ] ] order_by_clause ) 通过语法可以看出 o ...

  4. U盘中毒后变为快捷方式的解决方法

    今天神奇地发现,如果U盘中毒后,变为快捷方式,那么你可以有三种解决方法: (1)在网上下一个脚本程序,将文件恢复: (2)使用U盘查杀的工具,一般的工具应该有U盘文件恢复这一项,比如金山的杀毒软件: ...

  5. json中带有\r\n处理

    后台代码把换行符\r\n替换为\\r\\n,前台代码js收到的字符就是\r\n

  6. Carbon - 在线生成精美的代码片段图片(含插件)

    Carbon 是一个可以帮助你创建和分享源代码美丽图像的小工具.开始在文本区域输入或拖入代码文件以开始使用.你还在等什么? 让你的设计实力给阅读者留下深刻印象. 在线演示      免费下载 您可能感 ...

  7. luogu P4931 情侣?给我烧了!

    双倍经验 传送门 首先坐在一起的cp和不坐在一起的cp是相对独立的,可以分开考虑,然后方案数相乘 坐在一起的cp,方案为\(\binom{n}{k}*\binom{n}{k}*k!*2^k\).首先选 ...

  8. Vue 中循环绑定v-module表单

    子组件有一个列表要做输入验证 <template> <div> <el-form :model="value" ref="numberVal ...

  9. struts2简单入门

    框架是什么,框架有什么作用 框架 实现部分功能的代码. 作用 控制请求和响应. 相对于WEB项目的执行流程 struts2项目搭建流程 配置web.xml 配置前端控制器[核心控制器] ---一个fi ...

  10. RedisGeo

    redis3.2版本增加了对GEO(地理位置)的支持 操作命令 geoadd(String key, Double longitude, Double latitude, String member) ...