#查询的结果返回是容器Query Set的函数(Query Set模型类)
# 1. all() 查询的所有的符合条件的结果,支持正向索引,支持索引切片,不支持反向索引
user_list = User.objects.all()
print(type(user_list))
print(user_list)
print(user_list.query)
user = User.objects.all()[0] # [User: ming]
user1 = User.objects.all()[-1] # 不支持AssertionError: Negative indexing is not supported.
user2 = User.objects.all()[0:2] # <QuerySet [<User: [User: ming]>, <User: [User: xian]>]>
# 2. exclude(**kwargs) 查询满足条件对应额对立面的所有结果的list
user3 = User.objects.exclude(id=2)
# 该函数相当于将满足条件的记录剔除后返回其他所有记录。
# 3. order_by(*field) 查询按照指定的字段条件进行排序后的结果, 'tag_name'代表正序,'-tag_name'代表反序。
user4 = User.objects.order_by('id')
print(user4)
# Query Set 是一个储存查询记录的容器,具备列表的一些操作接口,可以被迭代
for i in user4:
print(i)
# 4. reverse() 反转查询结果
user5 = User.objects.all().reverse()
# 将查询结果反转
# 5. count() 显示查询结果的记录的条数,也就是Query Set容器中数据的条数
n = User.objects.all().reverse().count()
print(n)
# 6. exists() 判断查询结果是否存在,值为布尔类型
res = User.objects.filter(id=7).exists()
print(res)
False
(0.000) SELECT (1) AS `a` FROM `app_user` WHERE `app_user`.`id` = 7 LIMIT 1; args=(7,)
# 7. values(*field) 按照指定的字段们进行查询,返回存放包含字段们的字典的QuerySet
user = User.objects.values('name', 'age')
print(user)
#对应的sql: SELECT `app_user`.`name`, `app_user`.`age` FROM `app_user` LIMIT 21; args=()
<QuerySet [{'name': 'ming', 'age': 25}, {'name': 'xian', 'age': 26}, {'name': 'daidai', 'age': 58}, {'name': 'jeans', 'age': 23}, {'name': 'tenny', 'age': 26}]>
# 8 values_list(*field) 同values类似,但是返回的记录是以元组存放在Query Set中
user = User.objects.values_list('name', 'age')
print(user)
<QuerySet [('ming', 25), ('xian', 26), ('daidai', 58), ('jeans', 23), ('tenny', 26)]>
(0.000) SELECT `app_user`.`name`, `app_user`.`age` FROM `app_user` LIMIT 21; args=()
# 9 distinct(*field) 将其他的查询结果剔除重复的字段,括号内是字段名