描述:
1.查询集表示从数据库拿到对象的集合
2.查询集可以有多个过滤器
3.过滤器就是一个函数,根据添加的限制参数,返回限制以后的查询结果
1.all()查询所有
类名.objects.all()
实例:
def testOrm(req):
u = User.object.all()
return render(req,'show.html',{'obj':u})
1.filter([属性名=值])过滤出你要的数据
类名.objects.filter()
实例:
def testOrm(req):
u = User.objects.filter() # 返回所有
u = User.objects.filter(sex=True) # 返回性别为True的数据
u = User.objects.filter(sex=True,username__contains='张') # 查询性别为True并且用户名包含'张三'的数据
return render(req,'show.html',{'obj':u})
注意:
1.如果没有给条件,则默认查询所有
2.如果存在条件,则按照条件进行筛选,返回匹配的数据
(3)exclude([属性名=值])将符合条件的数据过滤掉
类名.object.exclude()
实例:
u = User.objects.exclude() # 返回所有
u = User.objects.exclude(sex=True)# 返回性别不为True的数据
u = user.objects.exclude(sex=True,username='张三') # 过滤掉性别为True并且用户名包含‘张三’的数据
(4)order_by排序
1.升序:order_by('id')
2.降序:order_by('-id')
实例:
u = User.objects.order_by('id')
u = User.objects.order_by('-id')
u = User.objects.order_by('-age')
(5)reverse()反转
u = User.objects.order_by('id').reverse() # 降序
u = User.objects.order_by('-id').reverse() # 升序
(6)values()返回一个列表,每条数据为一个字典
类名.objects.values()
实例:
u = User.objects.values() # 返回所有字段的数据
u = User.objects.values('username','age','sex') # 返回字段的值
(7)values_list()以元祖的形式返回数据的值
类名.objects.values_list()
u = User.objects.values_list()
u = User.objects.values_list('username','age')
返回一个对象的所有操作
(1)get()返回一个对象
注意:
1.只能匹配一条数据,如果匹配多条,则返回 MultpleObjectsReturned异常
2.如果匹配数据失败,则抛出DoesNotExist异常
3.只能匹配一条数据
实例:
u = User.objects.get(pk=1) # 正常
u = User.objects.get(age=18) # MultpleObjectsReturned 匹配到了多条数据
u = User.objects.get(age=1000) # DoesNotExist 匹配失败
**(2)first返回第一条数据
类名.objects.first()
实例
u = User.objects.first()
3.last()返回最后一条数据
类名.objects.last()
实例:
u = User.objects.filter().last()
(4)count()统计数据条数
类名.objects.count()
u = User.objects.count()
u = User.objects.filter(sex=True).count()
(5)exists()判断查询的数据是否存在
类名.objects.exists()
返回Bool值True/False
实例:
u = User.objects.exists()
u = User.objects.filter(username='张三').exists()
比较运算符
)概述: 实现where语句,作为filter() exclude() get()的参数
语法: 属性名称__运算符 = 值
外键: 属性名_id
转义: 类似like语句,是为了匹配占位,匹配数据中的%,sql中where like '%'
filter(sname__contains = '%')
(1)__contains()包含(模糊查询)
实例:
u = User.objects.filter(username__contains='张') # 查询名字中包含张的数据
(2) __startswith 以...开头 __endswith 以...结尾
实例:
u = User.object.filter(username_startswith='张')
u = User.object.filter(username__endswith='三')
u = User.objects.filter(username__startswith='张',username__endswith='三')
(4)对于空数据的查询 null
1.__isnull = True/False
2.=none
实例:
# 查询为null的数据
u = User.objects.filter(username__isnull=True)
u = User.objects.filter(username=none)
# 查询部位null的数据
u = User.objects.filter(username__isnull=False)
u = User.objects.filter(username__isnull=True)
(5)in 在...里
__in = [值...]
实例:
u = User.objects.filter(age__in=[18,20,30,40]) # 在...in
u = User.objects.exclude(age__in=[18,20,30]) # 不再not in ....
(6)range值的范围
__range = [值1,值2]
u = User.objects.filter(age__range=[10,39])
u = User.objects.exclude(age__range=[10.20])
(7)比较运算符
1.__gt
大于 >
2.__gte
大于 >=
3.__lt
小于等于<
4.__lte
小于等于 <=
实例:
u = User.objects.filter(age__gt=20)
u = User.objects.filter(age__gte=20)
u = User.objects.filter(age__lt=20)
u = User.objects.filter(age__lte=20)
集合函数
导入
from django.db.models import Max,Min,Avg,Sum
实例:
u1 = User.object.aggragate(Max('age'))
u2 = User.object.aggragate(Min('age'))
u3 = User.object.aggragate(Avg('age'))
u4 = User.object.aggragate(Sum('age'))
F、Q对象
F对象:
可以使用模型的A属性与B属性进行比较
支持算数运算
导入:
from django.db.models import F,Q
F 实例:
u = User.object.filter(id__gt=F('age'))
u = User.objects.filter(id__gt=F('age')+20)
Q对象
概述 过滤器的方法中的关键字参数,,条件为And模式,采用逻辑或引入Q对象
需求 进行or查询,或查询
解决 使用Q对象
Q对象可以使用&(and)、|(or)操作符组合起来
实例:
u = User.objects.filter(Q(pk__gt=3)|Q(age__gt=18))
u = User.object.filter(Q(username=‘张三’)&Q(password='23456'))
u = User.objects.filter(~Q(username='张三'))
n_bulk(id_list)
获取主键值的列表,并返回将每个主键值映射到具有给定ID的对象的实例的字典。
例:
>>> Blog.objects.in_bulk([1])
{1: <Blog: Beatles Blog>}
>>> Blog.objects.in_bulk([1, 2])
{1: <Blog: Beatles Blog>,2: <Blog: Cheddar Talk>}
>>> Blog.objects.in_bulk([])
{}
如果你传递in_bulk()一个空列表,你会得到一个空的字典。
原文:http://talk.2xkt.com/t/topic/628