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等方法中的通过__来明确查询条件。

     

     

  • 相关阅读:
    2.4 Git 基础
    MySQL的连接命令
    linux中的ls、cd、pwd命令
    Vim 快速入门之基本命令
    linux 中查看进程、杀死进程、进入进程的命令
    linux下文件夹的创建、复制、剪切、重命名、清空和删除的命令
    Linux下tar压缩和解压缩命令详解
    用Windows远程桌面连接树莓派的方法
    MariaDB数据库安装完需要初始化操作
    linux设置服务为自动启动和关闭并禁用的命令
  • 原文地址:https://www.cnblogs.com/BBS2013/p/13711496.html
Copyright © 2011-2022 走看看