设为首页 加入收藏

TOP

ORM:对象关系映射(二)
2019-07-11 18:10:44 】 浏览:142
Tags:ORM 对象 关系 映射
对象
  • exist():判断查询的数据是否存在,存在返回True,否则返回False,返回布尔值
    • 总结:

      # 返回的是queryset对象的
      all()    
      filter()
      exclude()
      values()  
      values_list() 
      order_by() 
      reverse() 
      distinct()
      # 返回的是单个对象的
      get() 
      first()
      last()
      # 返回的是数字的
      count()
      # 返回的是布尔值的
      exists()

    六、 单表查询的双下划线

    1. 条件判断,相当于SQL中的while
      • __gt:大于
        • ret = models.Person.objects.filter(pk__gt=1)
          • 获取pk大于1的
      • __lt:小于
        • ret = models.Person.objects.filter(pk__lt=3)
          • 获取pk小于3的
      • __gte:大于等于
        • ret = models.Person.objects.filter(pk__gte=1)
          • 获取pk大于等于1的
      • __lte:小于等于
        • ret = models.Person.objects.filter(pk__lte=3)
          • 获取pk小于等于3的
    2. __range:范围查询,相当于SQL的between...and...
      • ret = models.Person.objects.filter(pk__range=[1,3])
        • 获取pk范围是1到3的
    3. __in:成员判断
      • ret = models.Person.objects.filter(pk__in=[1,3])
        • 获取pk等于1、3的,相当于SQL的 in
      • ret = models.Person.objects.exclude(pk__in=[1,3])
        • 获取pk不等于1和3的,相当于SQL的 not in
    4. 模糊查询:相当于SQL的 like 和正则匹配
      • __contains:模糊查询
        • ret = models.Person.objects.filter(name__contains='A')
          • 获取name字段的值包含'A'的
      • __icontains:在contains的基础上,对条件中的字母大小写不敏感
        • ret = models.Person.objects.filter(name__icontains='A')
          • 获取name字段的值包含'A'或'a'的,忽略大小写
    5. 判断以...开头/结尾
      • __startswith:以...开头
        • ret = models.Person.objects.filter(name__startswith='A')
          • 获取name字段的值以'A'开头的
      • __istartswith:在startswith的基础上,对条件中的字母大小写不敏感
        • ret = models.Person.objects.filter(name__istartswith='A')
          • 获取name字段的值以'A'或'a'开头的,忽略大小写
      • __endswith:以...结尾
        • ret = models.Person.objects.filter(name__endswith='A')
          • 获取name字段的值以'A'结尾的
      • __iendswith:在endswith的基础上,对条件中的字母大小写不敏感
        • ret = models.Person.objects.filter(name__iendswith='A')
          • 获取name字段的值以'A'或'a'结尾的,忽略大小写
    6. __year:判断日期年份
      • ret = models.Person.objects.filter(birth__year='2019')
        • 获取birth字段的值的年份是2019的
      • __year只能筛选年份,如果要筛选年月日,使用contains:模糊查询
        • ret = models.Person.objects.filter(birth__contains='2018-06-24')
          • 获取birth字段的值是2018-06-24的
    7. __isnull:查询与null的项
      • __isnull = True:查询值是null的
        • ret = models.Person.objects.filter(phone__isnull=True)
          • 获取phone字段的值是null的
      • __isnull = False:查询值不是null的

    七、 ForeignKey操作

    1. 基于对象的查询

      • 正向查询,语法:对象.关联字段.字段
      book_obj = models.Book.objects.get(title='菊花怪大战MJJ')
      book_obj.pub
      book_obj.pub.name
      • 反向查询,语法:对象.表名_set.all(),表名即类名小写
        • 设置ForeignKey的参数:related_name,相当于替换了类名小写_set
      pub_obj = models.Publisher.objects.get(pk=1)
      # 没有指定related_name,使用类名小写_set
      pub_obj.book_set.all()
      # 指定related_name='books'
      pub_obj.books.all()
    2. 基于字段的查询

      • 正向查询,语法:关联字段__字段
      # 查询老男孩出版的书
      ret = models.Book.objects.filter(pub__name='老男孩出版社')
      • 反向查询,语法:表名__字段
        • 设置ForeignKey的参数:related_query_name,相当于替换了表名
      # 查询出版菊花怪大战MJJ的出版社
      # 没有指定related_name,使用类名的小写
      ret= models.Publisher.objects.filter(book__title='菊花怪大战MJJ')
      # related_name='books'
      ret= models.Publisher.objects.filter(books__title='菊花怪大战MJJ')
      # related_query_name='xxx'
      ret= models.Publisher.objects.filter(xxx__title='菊花怪大战MJJ')

    八、 多对多的操作

    1. 基于对象的查询

      • 正向查询,语法:对象.多对多字段.all()
      mjj = models.Author.objects.get(pk=1)
      mjj.books        # 关系管理对象
      mjj.books.all()
      • 反向查询,语法:对象.类名小写_set.all()
        • 设置related_name,相当于替换了类名小写_set
      book_obj = models.Book.objects.filter(title='桃花侠大战菊花怪').first()
      # 不指定related_name
      book_obj.author_set      # 关系管理对象
      book_obj.author_set.all()
      # 指定related_name='authors'
      book_obj.authors         # 关系管理对象
      book_obj.authors.all()
    2. 基于字段的查询

    首页 上一页 1 2 3 下一页 尾页 2/3/3
    】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
    上一篇python数据库-MySQL数据库高级查.. 下一篇Python - openpyxl 读写操作Excel

    最新文章

    热门文章

    Hot 文章

    Python

    C 语言

    C++基础

    大数据基础

    linux编程基础

    C/C++面试题目