添加
- 添加数据的两种方法
- 添加完书本的数据后就可以添加人物的数据了,
- 添加人物数据的时候要注意外键
修改数据
删除数据
hzhu = HeroInfo.objects.get('要删除的数据的条件')
例如:
删除数据等于18的数据
hzhu = HeroInfo.objects.get(id=18)
hzhu.delete()
sha_li = HeroInfo.objects.filter(id = 19)
sha_li.delete()
查询
基本查询
过滤查询
filter 过滤出满足条件的多个结果
exclude 排除掉符合条件剩下的结果
查询出了所有符合查询条件的数据
查询出了除了沙僧的所有数据
contains 是否包含
说明:如果要包含%无需转义直接写即可
查询出了所有名字包含黄的数据
in:是否包含在范围内
例如:
查询了编号为1或3或5的书
注意这里不是1到3到5的范围而是列表中写了什么就查什么
isnull 查询是否空
例如
查询书籍名不为空的数据
gt 大于
gte 大于等于
lt 小于
lte 小于等于
不等于运算符可以使用exclude()过滤器
例如
查询id不等于3的数据
year,month,day,week_dat,hour,minute,second
对日期时间类型的属性进行运算
例如
查询1980年发布的书
startswith
endswith
以指定值开头或结尾
例如
查询以部结尾的图书
F
实现属性之间的比较
导包
from django.db.models import F
例如
阅读量大于等于评论量
BookInfo.objects.filter(bread__gte = F('bcomment'))
阅读量大于等于2倍评论量
BookInfo.objects.filter(bread__gte = F('bcomment')*2)
Q
导包
from django.db.models import Q
用于实现mysql里的not and or
not ~
and &
or |
例如
查询阅读量大于20 并且 编号小于3的数据
and
or
阅读量大于20或者编号小于3的数据
not
编号不等于3的数据
聚合函数
aggregate返回值是字典
Avg 平均,Count数量,Sum计数,Max最大值,Min最小值
导包
from django.db.models import Avg, Count, Sum, Max, Min
求数量的时候可以直接使用count函数
排序
order_by
按照阅读量的正倒序排序
关联查询
获取一对多数据库多的那方的数据
- 一的对象.多的模型类小写_set.all()
获取多对一数据库一的那方的数据
- 直接使用外键即可
关联过滤查询
查询一的模型 条件是对多的一方属性进行判断
- 查询英雄是郭靖的书籍
- 条件如果需要关联模型的字段 那么就使用关联模型类小写__属性名__条件运算符 = ‘xxx’
- 查询图书 书的英雄描述包含掌
查询多的模型 条件是一的一方属性进行判断
- 条件使用关联的模型类的字典
- 模型类外键名__模型类属性名__条件运算符
- 查询天龙八部里的英雄
- 查询阅读量大于等于20的书的所有英雄
查询集的特性
惰性查询
- 查询集如果没有使用 msyql是不执行语句的
查询所有英雄
heros = HeroInfo.objects.all()
这时去查看mysql日志发现没有执行
然后 对hero做一个遍历
再去查看mysql日志发现已经执行
缓存
同一个查询集对象,在第一次使用的使用会把结果缓存,后再次使用的时候,不再查询 直接使用缓存的结果
判断查询集是否为空
exists()方法 返回True有数据 False没有数据