字段条件查询
字段查询是指如何指定SQL WHERE子句的内容。它们用作QuerySet的filter(), exclude()和get()方法的关键字参数。
其基本格式是:field__lookuptype=value,注意其中是双下划线。
默认查找类型为exact(精确匹配)。
lookuptype的类型有:
Django的数据库API支持20多种查询类型,下表列出了所有的字段查询参数:
字段名 说明
exact 精确匹配
iexact 不区分大小写的精确匹配
contains 包含匹配
icontains 不区分大小写的包含匹配
in 在..之内的匹配
gt 大于
gte 大于等于
lt 小于
lte 小于等于
startswith 从开头匹配
istartswith 不区分大小写从开头匹配
endswith 从结尾处匹配
iendswith 不区分大小写从结尾处匹配
range 范围匹配
date 日期匹配
year 年份
iso_year 以ISO 8601标准确定的年份
month 月份
day 日期
week 第几周
week_day 周几
iso_week_day 以ISO 8601标准确定的星期几
quarter 季度
time 时间
hour 小时
minute 分钟
second 秒
regex 区分大小写的正则匹配
iregex 不区分大小写的正则匹配
案例:
#字段条件查询
class TestFieldQuery(TestCase):
def setUp(self) -> None:
req1 = Request.objects.create(method=1,url='/mgr/course/',data={"name":"小明","age":16,"address":"nanjing"})
req2 = Request.objects.create(method=1,url='/mgr/teacher/',data={"name":"小刚","age":18,"address":"beijing"})
req3 = Request.objects.create(method=1,url='/mgr/course/',data={"name":"小明","age":16,"address":"nanjing"})
def test_iquery(self):
req = Request.objects.all().first()
print(req)
# 测试修改--整体
print('************************************')
# 字段条件查询的语法是:字段__条件名
print(Request.objects.filter(url__iexact='/MGR/course/'))
# 包含模式
print(Request.objects.filter(url__contains='course/'))
def test_in_query(self):
#
print(Request.objects.filter(url__in=['/mgr/course/']))
执行测试
python manage.py test sqtp.tests.TestFieldQuery
跨关系查询
Django提供了强大并且直观的方式解决跨越关联的查询,它在后台自动执行包含JOIN的SQL语句。要跨越某个关联,只需使用关联的模型字段名称,并使用双下划线分隔,直至你想要的字段(可以链式跨越,无限跨度).
例如
查找标签是xxx的用例
res1=Case.objects.filter(tags__name='smoketest')
案例:
#跨关系查询
class TestOverRelations(TestCase):
def setUp(self) -> None:
# 创建用例
config1 = Config.objects.create(name='case001',base_url='http://localhost')
config2 = Config.objects.create(name='case002',base_url='http://localhost')
self.case1 = Case.objects.create(config=config1)
self.case2 = Case.objects.create(config=config2)
def test_step_request(self):
# 准备测试数据 步骤和请求
step1 = Step.objects.create(belong_case=self.case1,name='step1')
step2= Step.objects.create(belong_case=self.case1,name='step2')
step3 = Step.objects.create(belong_case=self.case2,name='step3')
step4 = Step.objects.create(belong_case=self.case2,name='step4')
req1 = Request.objects.create(method=1,url='/mgr/teacher1/',data={"name":"小刚","age":18,"address":"beijing"},step=step1)
req2 = Request.objects.create(method=2,url='/mgr/teacher2/',data={"name":"小刚","age":18,"address":"beijing"},step=step2)
req3 = Request.objects.create(method=3,url='/mgr/teacher3/',data={"name":"小刚","age":18,"address":"beijing"},step=step3)
req4 = Request.objects.create(method=1,url='/mgr/teacher4/',data={"name":"小刚","age":18,"address":"beijing"},step=step4)
print(req1.step.belong_case) #链式语法
# 跨关系查询的语法: 字段__关联字段
# print(Request.objects.filter(step__belong_case=self.case2))
print(Request.objects.filter(step__belong_case__config__name='case001').filter(url__contains='teacher2'))
执行测试
python manage.py test sqtp.tests.TestOverRelations
网友评论