##############################增加数据############################################
方式1
会把新生成的对象返回给我们 弊端手动调用save方法
book=BookInfo(
name=‘python’,
pub_data=‘2000-01-01’
)
book.save()
方式2 直接入库
objects模型的管理类
我们对模型的 增删改查 都找它
BookInfo.objects.create(
name=‘java’,
pub_data=‘2020-1-1’,
commentcount=50,
is_delete=0,
readcount=100
)
##############################修改(更新)数据##########################
from book.models import BookInfo
1先查询数据
book=BookInfo.objects.get(id=1)
2直接修改实例的属性
book.readcount=1
3调用save方法
book.save()
方式二直接更新
BookInfo.objects.filter(id=1).update(
readcount=100,
commentcount=200
)
#############################删除数据#######################
方式1
1 先查询出数据
book=BookInfo.objects.get(id=6)
调用delect方法删除
book.delete()
方式二 直接删除
BookInfo.objects.filter(id=5).delete()
###################基本查询########################
get 得到某一个数据
all 获取所有的
count 个数
book=BookInfo.objects.get(id=1)
查询id 不存在时会抛出异常
try:
book=BookInfo.objects.get(id=2)
except BookInfo.DoesNotExist:
pass
BookInfo.objects.all()
###########filter,get,exclude#######################
“”"
select from bookinfo where 条件语句
相当于 where 查询
filter : 筛选、过滤 返回 n 个结果 返回的是一个列表
get : 返回一个结果 返回单一对象
exclude :刨除 筛选过剩下的
语法形式:
以filter(字段名————运算符=值)
“”"
1查询编号为1的图书
exact 精确的准确的
BookInfo.objects.get(id__exact=1)
2查询书名包含"湖"的图书
BookInfo.objects.filter(name__contains=‘湖’)
3查询书名以部结尾的图书
BookInfo.objects.filter(name__endswith=‘部’)
4查询书名为空的图书
BookInfo.objects.filter(name__isnull=True)
5查询编号为1或3或5的图书
BookInfo.objects.filter(id__in=[1,3,5])
查询编号大于3的图书
gt 大于
gte 大于等于
BookInfo.objects.filter(id__gt=3)
查询1980年发表的图书
BookInfo.objects.filter(pub_data__year=1980)
查询1990年1月1日后发表的图书
BookInfo.objects.filter(pub_data__gt=‘1990-1-1’)
###################### F对象################################
两个属性怎么比较F对象
“”"
F 对象的语法形式
filter(字段名————运算符=F(‘字段名’))
查阅阅读量大于等于评论量的书籍
“”"
from django.db.models import F
查阅阅读量大于等于评论量的书籍
BookInfo.objects.filter(readcount__gte=F(‘commentcount’))
查阅阅读量大于等于评论量2倍的书籍
BookInfo.objects.filter(readcount__gte=F(‘commentcount’)*2)
###################### Q 对象################################
需要查询id大于2并且阅读量大于20的书籍
方式1
filter().filter()
BookInfo.objects.filter(id__gt=2).filter(readcount__gt=20)
方式二
filter(条件,条件)
BookInfo.objects.filter(id__gt=2,readcount__gt=20)
需要查询id大于2或者阅读量大于20的书籍
from django.db.models import Q
“”"
Q(字段名__运算符=值)
或 Q()|Q()
并且 Q()& Q()
not ~Q
“”"
BookInfo.objects.filter(Q(id__gt=2)|Q(readcount__gt=20))
###################### 聚合函数############################
“”"
sum.max,min,Avg,count
聚合函数需要使用aggregate
语法形式是:aggragte(XXX('字段 '))
“”"
当前数据的阅读总量
from book.models import BookInfo
from django.db.models import Sum,Max,Min,Avg,Count
BookInfo.objects.aggregate(Sum(‘readcount’))
###################### 排序################################
默认升序
BookInfo.objects.all().order_by(‘readcount’)
降序
BookInfo.objects.all().order_by(’-readcount’)
###################### 关联查询################################
“”"
书籍和人物的关系是 1:N
书籍 中没有没有任何关于人物的字段
人物 中有关于书籍的字段book 外键
语法形式
通过书籍查询人物信息(已知 主表数据,关联查询从表数据)
主表模型,关联模型类名小写_set
“”"
from book.models import Peopleinfo
正向查询
查询书籍为1的所有人物信息
book=BookInfo.objects.get(id=1)
book.peopleinfo_set.all()
反向查询
查询人物为1的书籍信息
people=Peopleinfo.objects.get(id=1)
people.book
people.book.name
###################### 关联查询筛选 ################################
“”"
书籍和人物的关系是 1:N
书籍 中没有没有任何关于人物的字段
人物 中有关于书籍的字段book 外键
语法形式
我们需要的是 书籍信息,已知条件是 人物信息
我们需要的是 主表数据,已知条件是 从表信息
filter(关联模型类名小写___字段__运算符=值)
我们需要的是 人物信息 已知条件 是书籍
“”"
“”"
查询图书,要求图书人物为郭靖
查询图书,要求图书人物的描述包含"八"
“”"
BookInfo.objects.filter(peopleinfo__name__exact=‘郭靖’)
BookInfo.objects.filter(peopleinfo__description__contains=“八”)
Peopleinfo.objects.filter(book__name=“天龙八部”)
Peopleinfo.objects.filter(book__readcount__gt=30)
###################### 查询结果集 ################################
“”"
all()
filter()
exclude()
order_by()
两大特性
1惰性执行
创建查询集不会访问数据库,直接调用数据时,才会访问数据库,调用数据的情况包括迭代,序列化,与if合用
2缓存
内存:存储容量小,读取速度快断电即失
硬盘:存储容量大 读取速度慢,断电保存
当前缓存的概念:
我们将硬盘的数据 存在在内存中,这样读取速度就很快
“”"