- 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连用
- 多对多查询