Django中manger/QuerySet類與mysql數據庫的查詢
阿新 • • 發佈:2019-03-05
sta lec 字典 mysql數據庫 tin 反轉 ted isn fence
#查詢的結果返回是容器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) 將其他的查詢結果剔除重復的字段,括號內是字段名