1. 程式人生 > >django—model核心查詢

django—model核心查詢

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核心查詢