Django(ORM查询)

day69

参考:http://www.cnblogs.com/liwenzhou/p/8660826.html

 

在Python脚本中调用Django环境

orm1.py

复制代码
import os

if __name__ == '__main__': os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ormday69.settings") #ormday69项目下的settings import django django.setup() from app01 import models books = models.Book.objects.all() print(books)
复制代码

一般操作

必知必会13条

复制代码
<1> all():                 查询所有结果
 
<2> filter(**kwargs):      它包含了与所给筛选条件相匹配的对象
 
<3> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。 <4> exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象 <5> values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列model的实例化对象,而是一个可迭代的字典序列 <6> values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列 <7> order_by(*field): 对查询结果排序 <8> reverse(): 对查询结果反向排序,请注意reverse()通常只能在具有已定义顺序的QuerySet上调用(在model类的Meta中指定ordering或调用order_by()方法)。 <9> distinct(): 从返回结果中剔除重复纪录(如果你查询跨越多个表,可能在计算QuerySet时得到重复的结果。此时可以使用distinct(),注意只有在PostgreSQL中支持按字段去重。) <10> count(): 返回数据库中匹配查询(QuerySet)的对象数量。 <11> first(): 返回第一条记录 <12> last(): 返回最后一条记录 <13> exists(): 如果QuerySet包含数据,就返回True,否则返回False
复制代码

 数据:

实践:

 1     # 查询所有的人
 2     ret = models.Person.objects.all()
 3     print("all:", ret)
 4     # get查询
 5     ret = models.Person.objects.get(name="小黑")
 6     print("get:", ret)
 7     # filter
 8     ret = models.Person.objects.filter(id=2)  # 不存在返回一个空的QuerySet,不会报错
 9     print("filter:", ret)
10     # 就算查询的结果只有一个,返回的也是QuerySet,我们要用索引的方式取出第一个元素
11     ret = models.Person.objects.filter(id=2)[0]
12     print("filter索引:", ret)
13 
14     print("exclude".center(80, "*"))  # 将exclude放中间
15     # exclude id为1 的内容
16     ret = models.Person.objects.exclude(id=1)
17     print(ret)
18 
19     print("values".center(80, "*"))
20     # values 返回一个QuerySet对象,里面都是字典。 不写字段名,默认查询所有字段
21     ret = models.Person.objects.values("name", "birthday")
22     print("字典:", ret)
23 
24     print("values_list".center(80, "*"))
25     # values_list 返回一个QuerySet对象,里面都是元祖。 不写字段名,默认查询所有字段
26     ret = models.Person.objects.values_list()
27     print("元组:", ret)
28 
29     print("order_by".center(80, "*"))
30     # order_by 按照指定的字段排序
31     ret = models.Person.objects.all().order_by("birthday")
32     print("按生日排序:", ret)
33 
34     print("reverse".center(80, "*"))
35     # reverse 将一个有序的QuerySet 反转顺序
36     # 对有序的QuerySet才能调用reverse
37     ret = models.Person.objects.all().order_by("birthday").reverse()
38     print("反向排序:", ret)
39 
40     print("count".center(80, "*"))
41     # count 返回QuerySet中对象的数量
42     ret = models.Person.objects.all().count()
43     print("对象的数量:", ret)
44 
45     print("first".center(80, "*"))
46     # first 返回QuerySet中第一个对象
47     ret = models.Person.objects.all().first()
48     print("按生日排序后的第一个:", ret)
49 
50     print("last".center(80, "*"))
51     # last 返回QuerySet中最后一个对象
52     ret = models.Person.objects.all().last()
53     print("按生日排序后的最后一个:", ret)
54 
55     print("exists".center(80, "*"))
56     # exists 判断表里有没有数据
57     ret = models.Person.objects.exists()
58     print(ret)

结果:

all: <QuerySet [<Person: 暗示>, <Person: 嘟嘟>, <Person: 格尔玛>, <Person: 薏米>, <Person: 小黑>, <Person: 哗哗>]>
get: 小黑
filter: <QuerySet [<Person: 薏米>]>
filter索引: 薏米
************************************exclude*************************************
<QuerySet [<Person: 暗示>, <Person: 嘟嘟>, <Person: 格尔玛>, <Person: 薏米>, <Person: 哗哗>]>
*************************************values*************************************
字典: <QuerySet [{'birthday': datetime.date(2018, 2, 16), 'name': '暗示'}, {'birthday': datetime.date(2019, 2, 6), 'name': '嘟嘟'}, {'birthday': datetime.date(2019, 2, 13), 'name': '格尔玛'}, {'birthday': datetime.date(2019, 2, 14), 'name': '薏米'}, {'birthday': datetime.date(2019, 2, 27), 'name': '小黑'}, {'birthday': datetime.date(2020, 2, 3), 'name': '哗哗'}]>
**********************************values_list***********************************
元组: <QuerySet [(6, '暗示', 21, datetime.date(2018, 2, 16)), (5, '嘟嘟', 23, datetime.date(2019, 2, 6)), (3, '格尔玛', 34, datetime.date(2019, 2, 13)), (2, '薏米', 33, datetime.date(2019, 2, 14)), (1, '小黑', 18, datetime.date(2019, 2, 27)), (4, '哗哗', 12, datetime.date(2020, 2, 3))]>
************************************order_by************************************
按生日排序: <QuerySet [<Person: 暗示>, <Person: 嘟嘟>, <Person: 格尔玛>, <Person: 薏米>, <Person: 小黑>, <Person: 哗哗>]>
************************************reverse*************************************
反向排序: <QuerySet [<Person: 哗哗>, <Person: 小黑>, <Person: 薏米>, <Person: 格尔玛>, <Person: 嘟嘟>, <Person: 暗示>]>
*************************************count**************************************
对象的数量: 6
*************************************first**************************************
按生日排序后的第一个: 暗示
**************************************last**************************************
按生日排序后的最后一个: 哗哗
*************************************exists*************************************
True

猜你喜欢

转载自www.cnblogs.com/112358nizhipeng/p/10451050.html