$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代表,不做外键关联
随机推荐
- 使用git 上传项目到gitee/github
参考: https://blog.csdn.net/qq944639839/article/details/79864081 注意:在此之前需要设置ssh公匙 详见:Github/github 初始化 ...
- 【1】【leetcode-127】单词接龙word-ladder
(不会,经典广度优先搜索) 给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度.转换需遵循如下规则: 每次转换只能改 ...
- C# test
//测试对象集合序列化 public void jsonTest() { List<moduleEntity> list = new List<moduleEntity>(); ...
- kindeditor<=4.1.5 文件上传漏洞利用
kindeditor<=4.1.5 文件上传漏洞 - Kindeditor <=4.1.5 file upload vulnerability and use 漏洞存影响版本:小于等于4. ...
- [C++]PAT乙级1006. 换个格式输出整数 (15/15)
/* 1006. 换个格式输出整数 (15) 让我们用字母B来表示“百”.字母S表示“十”,用“12...n”来表示个位数字n(<10),换个格式来输出任一个不超过3位的正整数. 例如234应该 ...
- [C++]基于Curses库的实时系统监测可视化系统-2017-12-09 15-07-42
Congratulations 0.0 技术记录 [1] [C++]Linux之Ubuntu下编译C程序出现错误:“ stray ‘\302'或者'\240' in program”的解决方案 [2 ...
- 在vscode上 运行typescript 文件
安装nodejs 安装链接: https://nodejs.org/zh-cn/ 安装测试: node -v npm -v 安装typescript sudo npm install typescri ...
- jupyter notebook出现cannot import name 'create_prompt_application'问题(Died Kernel)
应该是在安装其它python第三方库时更新了prompt-toolkit版本,降级到下面的版本即可: sudo pip install 'prompt-toolkit==1.0.15'
- MVC_Route层层深入
1.前期准备 新建一个MVC项目,并添加Home和About两个控制器 在这两个控制器对应添加index页面 namespace Study_MVC_Route.Controllers { publi ...
- pycharm 使用教程
本文为大家讲解的是pycharm 的安装和首次使用,PyCharm 是我用过的python编辑器中,比较顺手的一个.而且可以跨平台,在macos和windows下面都可以用,这点比较好.感兴趣的同学参 ...