首页 > 其他 > 详细

django queryset用法总结

时间:2021-06-19 12:48:47      阅读:15      评论:0      收藏:0      [点我收藏+]

1、查看query

str(User.objects.all().query)

 

 2.  And条件查询 

以下4种查询,效果相同

qs1 = User.objects.filter(first_name="John", is_active=True)
qs2 = User.objects.filter(first_name="John").filter(is_active=True)
qs3 = User.objects.filter(first_name="John") & User.objects.filter(is_active=True)
qs4 = User.objects.filter(Q(first_name="John") & Q(is_active=True)

 

3、Or 或者条件查询

以下效果相同

qs1 = User.objects.filter(Q(first_name="John") | Q(first_name="Jane"))
qs2 = User.objects.filter(first_name="John") | User.objects.filter(first_name="Jane")

 

 4. 不等于 !=条件查询

 以下效果相同

qs1 = User.objects.filter(~Q(first_name="John"))
qs2 = User.objects.exclude(first_name="John")

 

 5. 范围条件判断 

qs = User.objects.filter(pk__in=[1, 4, 7])

 

6. Null空判断 

qs = User.objects.filter(first_name__isnull=True)
qs = User.objects.filter(first_name__isnull=False)

  

7.  暧昧查询  like 

%  : 任意多个字符
_ : 一个字符

qs = User.objects.filter(first_name__startswith="Jo") 前匹配 Jo%
qs = User.objects.filter(last_name__endswith="yan") 后匹配 %yan
qs = User.objects.filter(last_name__contains="oh") 包含 或 中间匹配 %oh%
qs = User.objects.filter(last_name__regex=r"^D.e$") D_e (3个字符,前后固定,中间任意 例如 D1e Dxe等)

用法总结:startswithistartswithendswithiendswithcontainsicontainsregexiregex 

  

 8. 大、小 、>、<判断

s = User.objects.filter(id__gt=3)     大于
qs = User.objects.filter(id__lt=4) 小于

qs = User.objects.filter(id__lte=4) 小于等于

gte >=
lte <=.
More on this here

 

9. 范围条件判断  between

import pytz
from django.utils import timezone
start = timezone.make_aware(timezone.datetime(year=2019, month=1, day=1), pytz.utc)
end = timezone.make_aware(timezone.datetime(year=2019, month=12, day=31), pytz.utc)


qs = User.objects.filter(date_joined__range=[start, end])

 

10. 限制查询结果返回的数量

qs = User.objects.all()[:10]   
等同于:

SELECT ... FROM "auth_user" LIMIT 10

 

 

10. 排序

 qs = User.objects.order_by(‘date_joined‘, ‘-first_name‘)
等同于“
SELECT ... FROM "auth_user" ORDER BY "auth_user"."date_joined" ASC, "auth_user"."first_name" DESC

 

11.如何取得一个对象

 

 qs = User.objects.all(), User.object.filter() 得到的不是single object instance, 而是queryset


 得到一个对象有以下方法

User.objects.all()[0]    异常: 无数据 IndexError
User.objects.get(pk=1) 可能的异常:无数据 DoesNotExist exception 或者 多个数据 MultipleObjectsReturned exception
user = User.objects.order_by(‘first_name‘).last()

以下2个效果相同:

user = User.objects.order_by(date_joined, -first_name).first()

 

try: 
   user = User.objects.order_by(date_joined, -first_name)[0] 
except IndexError: 
   user = None

 

django queryset用法总结

原文:https://www.cnblogs.com/lxgbky/p/14891463.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!