day56

聚合函数

聚合函数必须用在分组之后

默认整体就是一组

关键字:aggregate

模块导入:

from django.db.models import Max, Min, Sum, Avg, Count
# 筛选出价格最高的书籍的
res = models.Book.objects.aggregate(mr = Max('price'))
print(res)

res = models.Book.objects.aggregate(Max('price'),Min('price'),Sum('price'),Count('price'),Avg('price'))
print(res)

分组查询

关键字:annotate

#django中models后面点什么就按照什么分组
# 统计每一本书的作者个数 书名 和对应的作者人数
res=models.Book.objects.annotate(author_num=Count('authors__id')).values('title','author_num')
print(res)
# 统计出每个出版社卖的最便宜的书的价格  出版社的名字 价格
res = models.Publish.objects.annotate(min_price=Min('book__price')).values('name','min_price')
print(res)

F和Q查询

from django.db.models import F,Q

F查询

F能够获取表中字段对应的值

# 查询库存数量大于卖出数量的书籍
res = models.Book.objects.filter(kun_cun__gt=F('mai_cun'))
print(res.values('title'))

# 将所有书的价格上涨100块
models.Book.objects.all().update(price=F('price') + 100)
print(res)

# 将所有书的名称后面全部加上 "爆款" 后缀   操作字符串数据需要借助于Concat方法
from django.db.models.functions import Concat
from django.db.models import Value
ret3 = models.Book.objects.update(title=Concat(F('title'), Value('新款')))

Q查询

res = models.Book.objects.filter(Q(title='三国演义'),Q(kun_cun=500))  # Q包裹之后逗号还是and关系

res = models.Book.objects.filter(Q(title='三国演义') | Q(kun_cun=500))  #  |就是or的关系

res = models.Book.objects.filter(~Q(title='三国演义') | Q(kun_cun=500))  #   ~就是not关系
q = Q()
q.connector = 'or'  # 默认是and  可以改成or
q.children.append(('title','三国演义'))
q.children.append(('kun_cun__gt',500))
res = models.Book.objects.filter(~q)  # 取反
print(res)

orm字段及参数

Django字段 MySQL字段
CharField varchar
IntegerField int
BigIntegerField bigint
EmailField varchar(254)
DateField YYYY-MM-DD
DateTimeField YYYY-MM-DD HH:MM
AutoField auto_increment
BooleanField 布尔值,自动存成1/0
TextField 大段文本
FileField 文件路径
DecimalField 10进制小数

自定义char字段

class MyCharField(models.Field):
	def __init__(self,max_length,*args,**kwargs):
        self.max_length = max_length
        # 重新调用父类的方法
        super().__init__(max_length=max_length,*args,**kwargs)


    def db_type(self, connection):
        return 'char(%s)'%self.max_length

事务

事务四大特性

ACID

  • 原子性:原子意为最小的粒子,即不能再分的事务,要么全部执行,要么全部取消

  • 一致性:指事务发生前和发生后,数据的总额依然匹配

  • 隔离性:某个事务的操作对其他事务不可见

  • 持久性:当事务完成后,其影响应当保留下来,不能撤销;只能通过“补偿性事务”抵消之前的错误

    存储引擎

rollback

回滚,返回上一个状态

Django中的事务

from django.db import transaction
  
		with transaction.atomic():
			# 在缩进的代码中书写数据库操作
			# 该缩进内的所有代码 都是一个事务
			pass   

posted on 2019-11-28 22:06  shenblogs  阅读(87)  评论(0)    收藏  举报

导航