python的django项目中orm的一些查询语句

本文详细介绍了在Python的Django项目中ORM查询语句的使用,包括但不限于:过滤查询、排除查询、聚合函数、排序、去重等功能。通过示例展示了如何根据年龄、用户名进行各种条件的查询,以及如何进行复杂的数据操作,如计算平均值、求和、最大值等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python的django项目中orm查询语句


# 查询年龄大于10岁的用户
User.objects.filter(age__gt=10) 

# 查询年龄大于等于10岁的用户
User.objects.filter(age__gte=10) 

# 查询年龄小于10岁的用户
User.objects.filter(age__lt=10)

# 查询年龄小于等于10岁的用户
User.objects.filter(age__lte=10) 

# 查询年龄在某一范围的用户
User.objects.filter(age__in=[10,30])

# __exact 相当于 like'小明',
User.objects.filter(username__exact='小明')

# __iexact 忽略大小写 ilike 'XiaoMing',
User.objects.filter(username__iexact='XiaoMing')

# __contains 中间包含 like '%小%',
User.objects.filter(username__contains='%小%')

# __icontains 中间包含忽略大小写 ilike '%Xiao%',
User.objects.filter(username__contains='%Xiao%')

# __contains和__icontains对于sqlite来说,__contains的作用效果等同于__icontains.

#查询用户名为空的用户
User.objects.filter(username__isnull=True) 

#查询用户名不为空的用户
User.objects.filter(username__isnull=False) 

#查询年龄不为10的用户
User.objects.filter().excute(age=10) 

#查询年龄不为在[10, 20]的用户
User.objects.filter().excute(age__in=[10, 20]) 

方法名                    解释
filter()            过滤查询对象。
exclude()            排除满足条件的对象
annotate()            使用聚合函数
order_by()            对查询集进行排序
reverse()            反向排序
distinct()            对查询集去重
values()            返回包含对象具体值的字典的QuerySet
values_list()        与values()类似,只是返回的是元组而不是字典。
dates()                根据日期获取查询集
datetimes()            根据时间获取查询集
none()                创建空的查询集
all()                获取所有的对象
union()                并集
intersection()        交集
difference()        差集
select_related()    附带查询关联对象
prefetch_related()    预先查询
extra()                附加SQL查询
defer()                不加载指定字段
only()                只加载指定的字段
using()                选择数据库
select_for_update()    锁住选择的对象,直到事务结束。
raw()                接收一个原始的SQL查询

# 计算学生平均年龄, 返回字典。age和avg间是双下划线哦

Student.objects.all().aggregate(Avg('age'))

{ 'age__avg': 12 }

 

# 学生平均年龄,返回字典。all()不是必须的。

Student.objects.aggregate(Avg('age'))

{ 'age__avg: 12' }

 

# 计算学生总年龄, 返回字典。

Student.objects.aggregate(Sum('age'))

{ 'age__sum': 144 }

 

# 学生平均年龄, 设置字典的key

Student.objects.aggregate(average_age = Avg('age'))

{ 'average_age': 12 }

 

# 学生最大年龄,返回字典

Student.objects.aggregate(Max('age'))

{ 'age__max': 12 }

 

# 同时获取学生年龄均值, 最大值和最小值, 返回字典

Student.objects.aggregate(Avg('age‘), Max('age‘), Min('age‘))

{ 'age__avg': 12, 'age__max': 18, 'age__min': 6, }

 

# 根据Hobby反查学生最大年龄。查询字段student和age间有双下划线哦。

Hobby.objects.aggregate(Max('student__age'))

{ 'student__age__max': 12 }
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值