zoukankan      html  css  js  c++  java
  • django--orm操作

    一 必知必会13条:

      返回对象列表的

        1.all() :查所有 

        2.filter() :查一行

        3.exclude():排除(里面可以写条件,意思除了这个条件的所有)

        4.order_by():默认升序(可以写条件,加符号为降序)

        5.reverse() :它是对已经排好序的基础上进行翻转。

        6.distinct():从返回结果中剔除重复纪录(如果你查询跨越多个表,可能在计算QuerySet时得到重复的结果。此时可以使用distinct(),注意只有在PostgreSQL中支持按字段去重。)

       返回特殊的对象列表

        7.values() :返回一个列表,里面是字典,括号里可以加条件

        8.values_list() :返回一个列表,里面是元祖,括号里可以加条件

      返回具体对象的

        9.get():获取某一条,娶不到就报错

        10.first():默认按id取第一个,娶不到就是none,不会报错。

        11.last();默认按id取最后一个,娶不到就是none,不会报错。

        返回布尔值的

        12.exists():判断查询结果是否存在

        返回数字的

        13.count(): 计数 。

    二 模糊查询,神奇的下划线:

    models.Tb1.objects.filter(id__lt=10, id__gt=1)   # 获取id大于1 且 小于10的值
     
    models.Tb1.objects.filter(id__in=[11, 22, 33])   # 获取id等于11、22、33的数据
    models.Tb1.objects.exclude(id__in=[11, 22, 33])  # not in
     
    models.Tb1.objects.filter(name__contains="ven")  # 获取name字段包含"ven"的
    models.Tb1.objects.filter(name__icontains="ven") # icontains大小写不敏感
     
    models.Tb1.objects.filter(id__range=[1, 3])      # id范围是1到3的,等价于SQL的bettwen and
     
    类似的还有:startswith,istartswith, endswith, iendswith 
    
    date字段还可以:
    models.Class.objects.filter(first_day__year=2017)

    三 orm外键

      查询:

         一对一:(不存在正反向,直接查)

    models.Author.objects.get(id=1).au.tel # 通过id查电话 (基于对象的)
    ss= models.Author.objects.filter(name='刘能').values('au__tel')[0]['au__tel'] # 通过名字拿电话,基于字段查

        一对多:

    基于对象查:
      正向查(假设书和出版设是一对多):   models.Book.objects.
    get(id=1).publis.name # 通过书的id查出版社
      反向查:
      models.Publish.objects.get(name='锅盖头出版社').book__set.all() # 通过出版社拿书
    基于字段查:
      正向查(正向按属性,反向按表名):
        models.Book.objects.filter(title='天龙九部').values(publis__name) # 通过书查出版设, 前面的是条件
    反向查 
      models.Publish.objects.filter(name='锅盖头出版社').values(book__title) # t通过0出版社拿书

      多对多:

    基于对象查:
      正向查:(书和作者)
       models.Book.objects.get(id=1).authors.all().values(name)# 通过书拿作者
      反向查:

      models.Author.objects.get(name=刘能).book_set.all().values('title') 通过作者拿书
    基于字段查询(正向按属性,反向按表名):
      正向查
      models.Book.objects.filter(title='天龙九部').values(authors__name) #通过书拿作者
      反向查:
      models.Author.objects.filter(name='刘能').values(book__title) # 通过作者拿书
     
  • 相关阅读:
    简单的BMCP位图图片压缩算法
    163相册验证码图片的识别手记之二 识别
    认父亲的DbParameter!!
    文件同步精灵(初版)
    163相册验证码图片的识别手记之一 去除干扰
    C#中WebService里的回车符"\r"丢失问题
    PHP 杂谈《重构改善既有代码的设计》之二 对象之间搬移特性
    PHP5计划任务离线功能的原理
    (转)程序员疫苗:代码注入
    window7环境,不安装Oracle,使用PL/SQL Developer结合oracle精简客户端,管理Oracle数据库
  • 原文地址:https://www.cnblogs.com/systemsystem/p/10472529.html
Copyright © 2011-2022 走看看