自学Django之模型

##############################增加数据############################################

方式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缓存
内存:存储容量小,读取速度快断电即失
硬盘:存储容量大 读取速度慢,断电保存
当前缓存的概念:
我们将硬盘的数据 存在在内存中,这样读取速度就很快
“”"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值