django—model核心查詢
阿新 • • 發佈:2017-12-01
mil mda ace uri ice 剔除 手機 dash not
查詢相關API
<
1
>
all
(): 查詢所有結果
<
2
>
filter
(
*
*
kwargs): 它包含了與所給篩選條件相匹配的對象
<
3
> get(
*
*
kwargs): 返回與所給篩選條件相匹配的對象,返回結果有且只有一個,
如果符合篩選條件的對象超過一個或者沒有都會拋出錯誤。
<
5
> exclude(
*
*
kwargs): 它包含了與所給篩選條件不匹配的對象
<
4
> values(
*
field): 返回一個ValueQuerySet——一個特殊的QuerySet,運行後得到的並不是一系列
model的實例化對象,而是一個可叠代的字典序列
<
9
> values_list(
*
field): 它與values()非常相似,它返回的是一個元組序列,values返回的是一個字典序列
<
6
> order_by(
*
field): 對查詢結果排序
<
7
> reverse(): 對查詢結果反向排序
<
8
> distinct(): 從返回結果中剔除重復紀錄
<
10
> count(): 返回數據庫中匹配查詢(QuerySet)的對象數量。
<
11
> first(): 返回第一條記錄
<
12
> last(): 返回最後一條記錄
<
13
> exists(): 如果QuerySet包含數據,就返回
True
,否則返回
False
雙下劃線之單表查詢
models.Tb1.objects.
filter
(id__lt
=
10
, id__gt
=
1
)
# 獲取id大於1 且 小於10的值
models.Tb1.objects.
filter
(id__in
=
[
11
,
22
,
33
])
# 獲取id等於11、22、33的數據
models.Tb1.objects.exclude(id__in
=
[
11
,
22
,
33
])
# not in
models.Tb1.objects.
filter
(name__contains
=
"ven"
)
models.Tb1.objects.
filter
(name__icontains
=
"ven"
)
# icontains大小寫不敏感
models.Tb1.objects.
filter
(id__range
=
[
1
,
2
])
# 範圍bettwen and
startswith,istartswith, endswith, iendswith
基於對象的跨表查詢
一對多查詢(Publish 與 Book)
正向查詢(按字段:publish):
查詢nid=1的書籍的出版社所在的城市<br>
book_obj
=
Book.objects.get(nid
=
1)
# book_obj.publish 是nid=1的書籍對象
反向查詢(按表名:book_set):
查詢 人民出版社出版過的所有書籍
publish
=
Publish.objects.get(name
=
"人民出版社"
)
book_list
=
publish.book_set.
all
()
# 與人民出版社關聯的所有書籍對象集合
for
book_obj
in
book_list:
print
(book_obj.title)
一對一查詢(Author 與 AuthorDetail)
正向查詢(按字段:authorDetail):
查詢egon作者的手機號
author_egon
=
Author.objects.get(name
=
"egon"
)
print
(author_egon.authorDetail.telephone)
反向查詢(按表名:author):
查詢所有住址在北京的作者的姓名
authorDetail_list
=
AuthorDetail.objects.
filter
(addr
=
"beijing"
)
for
obj
in
authorDetail_list:
print
(obj.author.name)
多對多查詢 (Author 與 Book)
正向查詢(按字段:authors):
金瓶眉所有作者的名字以及手機號
book_obj
=
Book.objects.
filter
(title
=
"金瓶眉"
).first()
authors
=
book_obj.authors.
all
()
for
author_obj
in
authors:
print
(author_obj.name,author_obj.authorDetail.telephone
反向查詢(按表名:book_set):
查詢egon出過的所有書籍的名字
author_obj
=
Author.objects.get(name
=
"egon"
)
book_list
=
author_obj.book_set.
all
()
#與egon作者相關的所有書籍
for
book_obj
in
book_list:
print
(book_obj.title)
基於雙下劃線的跨表查詢
關鍵點:正向查詢按字段,反向查詢按表明。
練習1: 查詢人民出版社出版過的所有書籍的名字與價格(一對多)
# 正向查詢 按字段:publish
queryResult=Book.objects
.filter(publish__name="人民出版社")
.values_list("title","price")
# 反向查詢 按表名:book
queryResult=Publish.objects
.filter(name="人民出版社")
.values_list("book__title","book__price")
你還好麽
django—model核心查詢