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连用

  • 多对多查询

你可能感兴趣的:(DjangoORM数据库)