上周回顾

聚合查询

关键字: aggregate

from django.db.models import Max,Min,Count,Sum,Avg

分组查询

关键字:annotate

最简单的规律:models后面电视猫,就按什么分组

F与Q查询

from django.db.modles import F,Q
F  能够帮助你获取到表中字段所对应的数据
# 书籍的库存数与卖出数
models.Book.objects.filter(kucun__gt=F('maichu'))

因为filter过滤的条件的都是and连接 
modesls.Book.objects.filter(Q(title='python'),Q(price=666))
modesls.Book.objects.filter(Q(title='python')|Q(price=666))
modesls.Book.objects.filter(~Q(title='python')|Q(price=666))

# Q进阶用法
q = Q()
q.connector = 'or'
q.children.append(('title','python'))
q.children.append(('title__icontains','python'))
q.children.append(('price',666))
models.Book.objects.filter(q)  # 默认还是and关系  

django中如何开启事务

from django.db import transaction
try:
    with transaction.atomic():
        #事务操作
except BaseException as e:
    print(e)

常见字段及参数

AutoField()
DateField()
DateTimeField()
    auto_now
    auto_now_add
TextField()
EmailField()          varchar(...)
BooleanField()        传布尔值  存0/1

自定义char字段

class MyCharField(models.Field):
            
        def db_type(self,connection):
            return 'char(%s)'%self.max_length

orm查询优化

 only
 defer
 orm内所有的语句操作 都是惰性查询:只会在你真正需要数据的时候才会走数据库,如果你单单只写orm语句时不会走数据库的               
 select_related:会将括号内外键字段所关联的那张表 直接全部拿过来(可以一次性拿多张表)跟当前表拼接操作
 prefetch_related:不主动连表而是将book表中的publish全部拿出来 在取publish表中将id对应的所有的数据取出
        

猜你喜欢

转载自www.cnblogs.com/aden668/p/11753145.html