1.去重查询
models.objects.values('field').filter(delete=0).distinct().order_by('field')
2.查看查询的sql语句
from django.db import connection
print(json.dumps(connection.queries))
3.查询条数限制
models.objects.filter()[(int(page) - 1) * int(page_size):int(page) * int(page_size)]
4.查询条件排除
exclude(status=1)
5.批量插入数据
querysetlist = []
for i in range(0,100):
code = Random().randint(1, 1000000)
querysetlist.append(models(code=code)
models.objects.bulk_create(querysetlist)
6.关联字段取别名
from django.db.models import F
User.objects.annotate(uid=F('user__id'),username=F('user__username')).values('uid','username','status').filter()
7.范围查询
models.objects.filter(create_time__range=(begin,end))
models.objects.filter(status__lt=1) 小于
models.objects.filter(status__lte=1) 小于等于
models.objects.filter(status__gt=1) 大于
models.objects.filter(status__gte=1) 大于等于
8.or查询 动态添加条件
from django.db.models import Q
query=Q()
for i in [1,2,3,4]:
query.add(Q(**{'status__contains': i}), Q.OR)
9.OR拼接查询
query = Q()
query.add(Q(**{'min__gte': 0}) & Q(**{'max__lte': 50}), Q.OR)
10.分组聚合
Model.objects.values("field").annotate(counts=Count(id))
11.统计两个字段的总和再相加
total=(models.objects.filter().aggregate(total=Sum("field")+Sum("field")))['total']
12.查询前一天的数据
import datetime
time = (datetime.datetime.now() + datetime.timedelta(days=-1)).date()
data = UserOrder.objects.filter(create_time__contains=time)
13.查询两个字段相乘后的总和
from django.db import models
model.objects.filter().aggregate(total=Sum(F("num") * F("amount"), output_field=models.DecimalField(max_digits=10, decimal_places=2)))
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210109095619376.png#pic_center)