67 orm13查詢語句,外鍵查詢,多對多查詢 單表查詢雙下劃線方法
主要內容:https://www.cnblogs.com/maple-shaw/articles/9403501.html
註意: 如果想要文件中運行整個django項目:
需要在文件中寫入:
import os if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "orm_operate.settings") import django django.setup()
1 orm常用的13個查詢語句:分為以下四種
a : 獲取對象列表:
obj = models.Person.objects.all() obj1 = models.Person.objects.filter(id=1) obj2 = models.Person.objects.exclude(name=‘alex‘) # values 比較特殊, 對象列表中不再是一個一個的對象, 而是一個字典, 裏面放著建和值 obj3 = models.Person.objects.all().values() # value_list 也比較特殊, 對象列表中也不在是對象, 而是一個元祖, 裏面放著每一行的值, obj4 = models.Person.objects.all().values_list()# print(obj4) # 對對象排序, -號表示可以取反序. obj5 = models.Person.objects.all().order_by(‘id‘) # print(obj5) # 必須在已有排序的基礎上進行排序 # obj6 = models.Person.objects.all().order_by(‘id‘).reverse() # 第二種方法: 也可以在models中的MATA方法中的ordering設置根據什麽排序 obj6 = models.Person.objects.all().reverse() # print(obj6)
b : 獲取對象:
# 如果該條件不存在或者產生多條數據都會報錯, 一般不推薦使用. obj7 = models.Person.objects.get(id=1) # first獲取第一個對象, 即對應的elast獲取最後一個對象. obj8 = models.Person.objects.all().first() obj9 = models.Person.objects.all().last() # obj10 = models.Person.objects.create(name=‘哪咤‘, age=25) # obj10.save() # print(obj10) # distinct 去重
c : 返回數字
obj11 = models.Person.objects.all().count()
d : 返回布爾值
obj12 = models.Person.objects.exclude(id=1).exists()
2 外鍵查詢
class Book(models.Model): id = models.AutoField(primary_key=True) title = models.CharField(max_length=32) press = models.ForeignKey(to=‘Press‘, related_name=‘books‘, null=True)
正向查詢:
1 . press_id和press.id的區別
# obj1 = models.Book.objects.get(id=1) # print(obj1.press.id) #從book表中取到press_id , 然後再找到press表中的id = press_id 的對象取出press.id # print(obj1.press_id) #直接從book表裏面取數據, 查找一次
2 . 關聯字段: 關聯字段__字段(跨表)
找到湖南出版社所出版的所有書籍 books = models.Book.objects.filter(press_id=(models.Press.objects.get(name=‘湖南衛視出版社‘)).id)
print(books) 執行流程: 先從 press表中取出id , 根據id = press_id再從book表中title books = models.Book.objects.filter(press__name=‘湖南衛視出版社‘) #使用了連表查詢, 查一次. print(books)
print(models.Book.objects.values_list("press__name"))
反向查詢:
1 . 獲取管理對象:
press_obj = press.objects.get(id = 1)
press_obj.books 獲取的是一個管理對象, 設置 related_name=‘books‘
press_obj.books.all() 獲取的與該出版社相關的書籍對象列表
2 . 設置和刪除對應關系:
obj1 = press.objects.get(id = 2)
obj1.books.set(Book.objects.filter(id__in = [4, 5]))
obj1.books.remove(*Book.objects.filter(id__in = [4, 5])) press字段設置, null = True
3 . 關聯字段:
找出快樂大本營該書的出版社
obj = models.Press.objects.filter(id=models.Book.objects.get(title=‘快樂大本營‘).press_id)
print(obj)
obj = models.Press.objects.filter(books__title=‘快樂大本營‘) , #涉及到了一個連表查詢, 查一次
print(obj)
3 多對對的查詢:
obj = models.Author.objects.get(id__in=[1]) # print(obj) # print(obj.name) print(obj.books.all()) # obj.books.set([2, 3]) # 設置對應關系 # obj.books.add(2,3) obj.books.remove(*models.Book.objects.all()) #刪除對應關系
67 orm13查詢語句,外鍵查詢,多對多查詢 單表查詢雙下劃線方法