美文网首页
Django_字段条件查询 和 跨关系查询

Django_字段条件查询 和 跨关系查询

作者: tzktzk1 | 来源:发表于2023-12-03 18:43 被阅读0次

    字段条件查询

    字段查询是指如何指定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
    

    相关文章

      网友评论

          本文标题:Django_字段条件查询 和 跨关系查询

          本文链接:https://www.haomeiwen.com/subject/jwxlgdtx.html