单表操作
新增数据
models.类名.objects.create()
models.类名().save()
修改
models.类名.objects.filter(条件).update()
obj = models.类名.objects.filter(条件)
obj.属性 = 值
obj.save()
删除
models.类名.objects.filter().delete()
查询
all() 查询所有结果
filter 查询符合条件的数据
get 返回一个符合条件的数据
exclude 返回不匹配的数据
order_by 排序
reverse 对查询结果反向排序
count 计数
first 返回第一条数据
last 返回最后一条数据
exists 判断
values 返回queryset对象里面是字典
values_list 返回queryset对象里面是元组
dstinct 去重
返回queryset对象的方法
all filter exclude order_by reverse distinct
特殊的queryset
values values_list
返回具体对象
get first last
基于双下划线模糊查询
in 值是否在一个列表中
gt 大于
lt 小于
gte 大于等于
lte 小于等于
range 值是否在一个范围内
contains
icontains
startswith
pub_date_year 按年查询
https://www.cnblogs.com/liuqingzheng/articles/9472723.html
多表关联
创建多表模型
使用OneToOneField和ForeignKey模型表的字段后面会自动增加_id
ManyToManyField:会自动创建第三张表
一对一的关系:OneToOneField
一对多的关系:ForeignKey
多对多的关系:ManyToManyField
添加表记录
多对多
add 添加记录 可以传入对象,id
remove 删除记录 可以传入对象,id
clear 清空记录 没有参数
set 更新记录 传入列表
基于对象的跨表查询
一对一:正向:按字段 反向:按表名小写
一对多:正向:按字段 反向:按表名小写_set.all()
多对多:正向:按字段 反向:按表名小写_set.all()
基于对象的查询是多次查询(子查询)
基于双下划线的跨表查询
正向按字段,反向按表名小写
聚合查询
from django.db.models import Avg,Sum,Max,Min,Count
models.类名.objects.all().aggregate(聚合函数)
分组查询
from django.db.models import Avg,Sum,Max,Min,Count
models.类名.objects.annotate(别名=聚合函数)
F查询:查询的条件作用两边都来自于数据库而非手动输入的值
Q查询:能够将filter内部默认的and关系转换成需要的