DjangoORM数据库

  • ORM(Object Relational Mapping,对象关系映射)
    https://www.cnblogs.com/liwenzhou/p/8688919.html
  • 常用字段
# encoding: utf-8

"""
  测试文件中加载Django项目 加载具体的配置信息
"""


import os

if __name__ == "__main__":

# 下面三行是加入的配置文件
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
    import django
    django.setup()

    from app01 import models
    # 查询所有人的信息

    res = models.Person.objects.all()

    # 查询特定信息 filter和get
    res2  = models.Person.objects.get(id=5)

    # filter
    filte_res = models.Person.objects.filter(id=100)

    # exculde 除了之外所有对象
    print "exculde".center(40, "*")
    print models.Person.objects.exclude(id=1)

    # values 返回所有字段的字典格式
    print "values".center(40, "*")
    print models.Person.objects.values()

    # order_by 根据排序
    print "order_by".center(40, "*")
    print models.Person.objects.all().order_by("birthday")

    # reverse 对结果的反向 注意:一般对默认有序的结果才能排序 一般在order_by后面
    print "reverse".center(40, "*")
    # distinct跨表查询会用到
    print models.Person.objects.all().order_by("birthday").reverse()



    # count 返回Query具体的数目
    print "count".center(40, "*")
    print models.Person.objects.all().count()

    # exists() 如果QuerySet包含数据,就返回True,否则返回False
    filte_bool = models.Person.objects.filter(id=100).exists()

    all_bool = models.Person.objects.exists()
    if filte_bool:
        print "有数据"
    else:
        print "没有数据"

    # 双下划线
    print "双下划线".center(40, "*")
    filte_res = models.Person.objects.filter(id__lt = 8, id__gt = 5)
    print filte_res
    #
    print "第一个".center(40, "*")
    filte_res = models.Person.objects.first()


    ####
    print "正向查询".center(40, "*")
    book_obj = models.Book.objects.first()
    ret = book_obj.publisher
    print ret

    # 如果没有related_name值的时候
    # print "反向查询1".center(40, "*")
    # pub_obj = models.Publisher.objects.first()
    # ret = pub_obj.book_set.all()
    # print ret

    print "反向查询2".center(40, "*")
    pub_obj = models.Publisher.objects.first()
    ret = pub_obj.books.all()
    print ret

注意几种返回类型的的差异性

  • 返回QuerySet对象
    • all 返回查询所有值
    • filter 过滤后的值返回
    • exclude 查询不满足条件的所有值
    • order_by 按照属性排序
    • reverse
    • distinct
  • 特殊的QuerySet
    • values 返回一个可迭代的字典序列
    • values_list 返回一个可迭代的元祖序列
  • 返回具体对象
    • get 返回特定的值
    • first / last
  • 返回布尔值
    • exists
  • 返回数值
    • count
values_list对应的操作对象是QuerySet,即[obj1, obj2,...]类型的数据

所有不能和get、first、last连用

  • 多对多查询
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文:https://my.oschina.net/liuyuantao/blog/751438 查询集API 参...
    阳光小镇少爷阅读 3,852评论 0 8
  • Django 准备 “虚拟环境为什么需要虚拟环境:到目前位置,我们所有的第三方包安装都是直接通过 pip inst...
    33jubi阅读 1,342评论 0 5
  • Django ORM用到三个类:Manager、QuerySet、Model。Manager定义表级方法(表级方法...
    廖马儿阅读 4,699评论 1 4
  • 模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立性)。软件设计中通常用耦合度和内聚...
    riverstation阅读 2,089评论 0 8
  • 007不写就出局---母亲节 曾经听过这样一句话: “据说神无法无处不在 , 所以创造了妈妈 。 就算已经成为孩子...
    涵君王一一李银阅读 245评论 0 2