• ORM 对象查询,单表条件查询,多表条件关联查询


    对象查询、单表条件查询、多表条件关联查询

    1.ORM基于对象的正向查找和反向查找:

    正向:对象调用属性

    反向:绑定的外键的那个关系表的对面调用 “父级_set”

    #--------------------对象形式的查找--------------------------
        # 正向查找
        ret1=models.Book.objects.first()
        print(ret1.title)
        print(ret1.price)
        print(ret1.publisher)
        print(ret1.publisher.name)  #因为一对多的关系所以ret1.publisher是一个对象,而不是一个queryset集合
    
        # 反向查找
        ret2=models.Publish.objects.last()
        print(ret2.name)
        print(ret2.city)
        #如何拿到与它绑定的Book对象呢?
        print(ret2.book_set.all()) #ret2.book_set是一个queryset集合

    2. django model filter比较参数

    __gt     大于
    
    __gte   大于等于
    
    __lt      小于
    
    __lte    小于等于
    
    __in     存在于一个list范围内
    
    __startswith    以...开头
    
    __istartswith   以...开头忽略大小写   insensitivity不敏感
    
    __endswith     以...结尾
    
    __iendswith    以...结尾,忽略大小写
    
    __range   在...范围内
    
    __year      日期字段的年份
    
    __month   日期字段的月份
    
    __day        日期字段的日
    
    __isnull=True/False
    
    __overlap      集合至少有一个元素重合
    
    __contains     集合包含
    
    __regex          匹配正则表达式

    3.多表条件关联查询

    双下划线(__)之多表条件关联查询

    # 正向查找(条件)
    
    #     ret3=models.Book.objects.filter(title='Python').values('id')
    #     print(ret3)#[{'id': 1}]
    
          #正向查找(条件)之一对多
    
          ret4=models.Book.objects.filter(title='Python').values('publisher__city')
          print(ret4)  #[{'publisher__city': '北京'}]
    
          #正向查找(条件)之多对多
          ret5=models.Book.objects.filter(title='Python').values('author__name')
          print(ret5)
          ret6=models.Book.objects.filter(author__name="alex").values('title')
          print(ret6)
    
          #注意
          #正向查找的publisher__city或者author__name中的publisher,author是book表中绑定的字段
          #一对多和多对多在这里用法没区别
    
    # 反向查找(条件)
    
        #反向查找之一对多:
        ret8=models.Publish.objects.filter(book__title='Python').values('name')
        print(ret8)#[{'name': '人大出版社'}]  注意,book__title中的book就是Publisher的关联表名
    
        ret9=models.Publish.objects.filter(book__title='Python').values('book__authors')
        print(ret9)#[{'book__authors': 1}, {'book__authors': 2}]
    
        #反向查找之多对多:
        ret10=models.Author.objects.filter(book__title='Python').values('name')
        print(ret10)#[{'name': 'alex'}, {'name': 'alvin'}]
    
        #注意
        #正向查找的book__title中的book是表名Book
        #一对多和多对多在这里用法没区别

    条件查询即与对象查询对应,是指在filter,values等方法中的通过__来明确查询条件。

     

     

  • 相关阅读:
    流媒体技术原理及播放方式(浅显易懂)
    实时音视频技术难点及解决方案
    流媒体技术简介
    DSP广告系统架构及关键技术解析(转)
    大型网站架构 图片服务器分离
    大话铁道部12306订票系统云架构
    技术揭秘12306改造(一):尖峰日PV值297亿下可每秒出票1032张
    12306火车票预定系统的需求分析
    PowerDesigner16.5 使用遇到的问题
    Ubuntu不输入密码执行sudo命令方法介绍
  • 原文地址:https://www.cnblogs.com/BBS2013/p/13711496.html
Copyright © 2020-2023  润新知