$Django 聚合函数、分组查询、F,Q查询、orm字段以及参数
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')
values在前,表示group by,在后,表示取值(默认pk/id 省略)
三.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
'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代表,不做外键关联
随机推荐
- inux进程/线程调度策略与 进程优先级
目的: 系统性的认识linux的调度策略(SCHED_OTHER.SCHED_FIFO.SCHED_RR): 实时调度?分时调度? 混搭系统(实时任务+分时任务),怎样调度. linux的调度策略 l ...
- redis互斥锁简易设计原理【原】
redis互斥锁设计 方式一: 使用 set(arg1,arg2,arg3,arg4,arg5) 绿线部分代码 //如果不存在就设置,且设置成功60秒后key自动失效,成功会返回字符串"OK ...
- HDU 1284(钱币兑换 背包/母函数)
与 HDU 1028 相似的题目. 方法一:完全背包. 限制条件:硬币总值不超过 n. 目标:求出组合种数. 令 dp[ i ][ j ] == x 表示用前 i 种硬币组合价值为 j 的钱共 x 种 ...
- [Android] Android 使用 Greendao 操作 db sqlite
Android 使用 Greendao 操作 db sqlite GreenDAO是一个开源的安卓ORM框架,能够使SQLite数据库的开发再次变得有趣.它减轻开发人员处理低级数据库需求,同时节省开发 ...
- JAVA方法调用中的解析与分派
JAVA方法调用中的解析与分派 本文算是<深入理解JVM>的读书笔记,参考书中的相关代码示例,从字节码指令角度看看解析与分派的区别. 方法调用,其实就是要回答一个问题:JVM在执行一个方法 ...
- AutoPostBack
AutoPostBack 属性用于设置或返回当用户在 TextBox 控件中按 Enter 或 Tab 键时,是否发生自动回传到服务器的操作. 如果把该属性设置为 TRUE,则启用自动回传,否则为 F ...
- svn 在show log 时候出现 want to go offline
今天终于把SVN服务器给配置好了,可以正常显示log信息了. 这周以来一直都在想着怎样解决svn log 显示 no date 这一问题,一时间不知道是怎么回事,上网都没能找到很好的解决方法.今天在使 ...
- Filter 快速开始 异步Servlet 异步请求 AsyncContext 异步线程 异步派发 过滤器拦截
[web.xml] <filter> <filter-name>normalFilter</filter-name> <filter-class>net ...
- FlexPaper 2.3.6 远程命令执行漏洞 附Exp
影响版本:小于FlexPaper 2.3.6的所有版本 FlexPaper (https://www.flowpaper.com) 是一个开源项目,遵循GPL协议,在互联网上非常流行.它为web客户端 ...
- 【webpack】使用DllPlugin拆分模块
开发过程中,我们经常需要引入大量第三方库,这些库并不需要随时修改或调试,我们可以使用DllPlugin和DllReferencePlugin单独构建它们. 具体使用如下: const HtmlWebp ...