Python第27天 下划线、F、Q查询

2018-12-26 12:11:19 、

2.1 ORM高级—双下划线 条件查询

------------双下划线---单表条件查询----------------

models.Tb1.objects.filter(id__lt=10, id__gt=1)   # 获取id大于1 且 小于10的值
models.Tb1.objects.filter(id__in=[11, 22, 33])   # 获取id等于11、22、33的数据
models.Tb1.objects.exclude(id__in=[11, 22, 33])  # not in
models.Tb1.objects.filter(name__contains="ven")
models.Tb1.objects.filter(name__icontains="ven") # icontains大小写不敏感
models.Tb1.objects.filter(id__range=[1, 2])   # 范围bettwen and
startswith(以XX开始),istartswith, endswith(以XX结尾), iendswith,

2.2 惰性机制(迭代/切片) F查询和Q查询

#objs=models.Book.objects.all()#[obj1,obj2,ob3...]
#QuerySet:   可迭代

for obj in objs:#每一obj就是一个行对象
    print("obj:",obj)
    # QuerySet:  可切片
    
    print(objs[1])
    print(objs[1:4])
    print(objs[::-1])
#-----------F 使用查询条件的值,专门取对象中某列值的操作,针对数字-------#

from django.db.models import F
models.Tb1.objects.update(num=F('num')+1)


#-------------Q 构建搜索条件,与、或关系----------------------#
from django.db.models import Q

#1 Q对象(django.db.models.Q)可以对关键字参数进行封装,从而更好地应用多个查询
q1=models.Book.objects.filter(Q(title__startswith='P')).all()
print(q1)#[<Book: Python>, <Book: Perl>]

# 2、可以组合使用&,|操作符,当一个操作符是用于两个Q的对象,它产生一个新的Q对象。
Q(title__startswith='P') | Q(title__startswith='J')

# 3、Q对象可以用~操作符放在前面表示否定,也可允许否定与不否定形式的组合
Q(title__startswith='P') | ~Q(pub_date__year=2005)

# 4、应用范围:

# Each lookup function that takes keyword-arguments (e.g. filter(),
#  exclude(), get()) can also be passed one or more Q objects as
# positional (not-named) arguments. If you provide multiple Q object
# arguments to a lookup function, the arguments will be “AND”ed
# together. For example:

Book.objects.get(
    Q(title__startswith='P'),
    Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6))
)

#sql:
# SELECT * from polls WHERE question LIKE 'P%'
#     AND (pub_date = '2005-05-02' OR pub_date = '2005-05-06')

# import datetime
# e=datetime.date(2005,5,6)  #2005-05-06

# 5、Q对象可以与关键字参数查询一起使用,不过一定要把Q对象放在关键字参数查询的前面。
# 正确:
Book.objects.get(
    Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)),
    title__startswith='P')
# 错误:
Book.objects.get(
    question__startswith='P',
    Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)))

给TA打赏
共{{data.count}}人
人已打赏
开发

Python第55天 Jenkins介绍

2023-9-11 18:33:06

开发

Python第九天 遍历、数据类型转换

2023-9-11 18:33:08

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索