1.all() 查詢全部 QuerySetpython
res=models.Book.objects.all()#惰性查詢 print(res) for i in res: print(i.title)
2.filter() 查詢指定範圍 QuerySetdjango
res=models.Book.objects.filter(pk=3) print(res)
3.get() 查詢單個對象,如有多個數據會報錯,不建議使用app
res=models.Book.objects.get(pk=2) print(res.title)
4.first() 拿第一個code
res=models.Book.objects.filter(pk=2).first() print(res)
5.last() 拿最後一個對象
res=models.Book.objects.filter(pk=1).last() print(res)
6.exclude() 除此以外 QuerySet排序
res = models.Book.objects.exclude(pk=3).filter(pk=4).filter(pk=4) print(res)
7.values() 查出全部的title以列表套字典形式 QuerySetrem
res=models.Book.objects.values('title') print(res) for r in res: print(r.get('title'))
8.values_list() QuerySet 同上列表套元組get
res = models.Book.objects.values_list('title') print(res)
9.count() 統計個數it
res=models=Book.objects.all().count() print(res)
10.distinct() 去重(必須是數據全同樣才能去重,包括主鍵)入門
res=models.Book.objects.all().distinct() res1=models.Book.objects.values('title').distinct() print(res,res1)
11.order_by() 排序默認升序
res=models.Book.objects.order_by('price') #res=models.Book.objects.order_by('-price')#倒序的一種方式 print(res)
12.reverse() 必須是已經排序好的才能夠反轉
res=models.Book.objects.order_by('price').reverse() print(res)
13.exists() 是否爲空,返回布爾值
res=modles.Book.objects.all().exists() print(res)
查詢價格大於200的書籍
res=models.Book.objects.filter(price__gt=200)
查詢價格小於200的書籍
res = models.Book.objects.filter(price__lt=200)
查詢價格大於或者等於200的書籍
res = models.Book.objects.filter(price__gte=200)
價格是200或者123.23或者666.66的
res = models.Book.objects.filter(price__in=[200,123.23,666.66])
價格在200到700之間的
res = models.Book.objects.filter(price__range=(200,700))
like % _
查詢書籍名稱中包含p的
res =models.Book.objects.filter(title__contains='p')#區分大小寫 res =models.Book.objects.filter(title__icontains='p')#不分大小寫
查詢以三開頭的書籍
res = models.Book.objects.filter(title__startswith='三') res1 = models.Book.objects.filter(title__endswith='P') print(res1)
查詢某年某月的書籍
res = models.Book.objects.filter(publish_date__year='2019') res = models.Book.objects.filter(publish_date__month='10')
#傳publish_id時傳id值 models.Book.objects.create(title='三國演義',price=123.23,publish_id=1) #若傳publish則傳publish對象 publish_obj=models.Book.objects.filter(pk=1).first() models.Book.objects.create(title='三國演義',price=123.23,publish=publish_obj)
book_obj = models.Book.objects.filter(pk=1).first() print(book_obj.publish) # 獲取到當前所對應的出版社對象 print(book_obj.publish_id) # 獲取到的就是表中的實際字段
models.Book.objects.filter(pk=1).update(publish_id=3) publish_obj = models.Publish.objects.filter(pk=2).first() models.Book.objects.filter(pk=1).update(publish=publish_obj)
models.Publish.objects.filter(pk=2).delete() 默認也是級聯更新 級聯刪除
book_obj=models.Book.objects.filter(pk=3).first() print(book_obj.authors) book_obj.authors.add(1,2) author_obj = models.Author.objects.filter(pk=1).first() author_obj1 = models.Author.objects.filter(pk=2).first() # book_obj.authors.add(author_obj) book_obj.authors.add(author_obj,author_obj1) """ add() 括號內既能夠傳數字也能夠傳數據對象 而且都支持傳多個 """
book_obj = models.Book.objects.filter(pk=3).first() # book_obj.authors.set([3,]) # book_obj.authors.set([1,3]) author_obj = models.Author.objects.filter(pk=1).first() author_obj1 = models.Author.objects.filter(pk=2).first() book_obj.authors.set((author_obj,)) book_obj.authors.set((author_obj,author_obj1)) """ set() 括號內 既能夠傳數字也傳對象 而且也是支持傳多個的 可是須要注意 括號內必須是一個可迭代對象 """
book_obj = models.Book.objects.filter(pk=3).first() # book_obj.authors.remove(2) # book_obj.authors.remove(1,2) author_obj = models.Author.objects.filter(pk=1).first() author_obj1 = models.Author.objects.filter(pk=2).first() # book_obj.authors.remove(author_obj) book_obj.authors.remove(author_obj,author_obj1) """ remove() 括號內 既能夠傳數字也傳對象 而且也是支持傳多個的 """
book_obj = models.Book.objects.filter(pk=3).first() book_obj.authors.clear() """clear()括號內不須要傳任何參數 直接清空當前書籍對象全部的記錄"""
""" ORM跨表查詢 1.子查詢 2.連表查詢 正反向的概念 外鍵字段在誰那兒 由誰查誰就是正向 誰手裏有外鍵字段 誰就是正向查 沒有外鍵字段的就是反向 書籍對象 查 出版社 外鍵字段在書籍 正向查詢 出版社 查 書籍 外鍵字段在書籍 反向查詢 正向查詢按字段 反向查詢按表名小寫 ... """
""" # 1.基於對象的跨表查詢 子查詢 # 1.查詢書籍是python入門的出版社名稱 book_obj = models.Book.objects.filter(title='python入門').first() # 正向查詢按字段 print(book_obj.publish.name) print(book_obj.publish.addr) # 2.查詢書籍主鍵是6的做者姓名 book_obj = models.Book.objects.filter(pk=6).first() # print(book_obj.authors) # app01.Author.None print(book_obj.authors.all()) # 3.查詢做者是jason的手機號 author_obj = models.Author.objects.filter(name='jason').first() print(author_obj.author_detail.phone) print(author_obj.author_detail.addr) """ 正向查詢 按字段 當該字段所對應的數據有多個的時候 須要加.all() 否者點外鍵字段直接就可以拿到數據對象 """ # 4.查詢出版社是東方出版社出版過的書籍 publish_obj = models.Publish.objects.filter(name='東方出版社').first() # print(publish_obj.book_set) # app01.Book.None print(publish_obj.book_set.all()) # 5.查詢做者是jason寫過的全部的書 author_obj = models.Author.objects.filter(name='jason').first() # print(author_obj.book_set) # app01.Book.None print(author_obj.book_set.all()) # 6.查詢手機號是110的做者 author_detail_obj = models.AuthorDetail.objects.filter(phone=110).first() print(author_detail_obj.author) print(author_detail_obj.author.name) print(author_detail_obj.author.age) """ 反向查詢按表名小寫 何時須要加_set 當查詢的結果能夠是多個的狀況下 須要加_set.all() 何時不須要加_set 當查詢的結果有且只有一個的狀況下 不須要加任何東西 直接表名小寫便可 """ # 7.查詢書籍是python入門的做者的手機號 book_obj = models.Book.objects.filter(title='python入門').first() print(book_obj.authors.all())