zoukankan      html  css  js  c++  java
  • 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等方法中的通过__来明确查询条件。

     

     

  • 相关阅读:
    多个类定义attr属性重复的问题:Attribute "xxx" has already been defined
    好用的批量改名工具——文件批量改名工具V2.0 绿色版
    得到ImageView中drawable显示的区域的计算方法
    得到view坐标的各种方法
    实现类似于QQ空间相册的点击图片放大,再点后缩小回原来位置
    Material Designer的低版本兼容实现(五)—— ActivityOptionsCompat
    Android 自带图标库 android.R.drawable
    解决 Attempting to destroy the window while drawing!
    解决Using 1.7 requires compiling with Android 4.4 (KitKat); currently using API 4
    Material Designer的低版本兼容实现(四)—— ToolBar
  • 原文地址:https://www.cnblogs.com/BBS2013/p/13711496.html
Copyright © 2011-2022 走看看