Django2.0-db(10)-什麼時候`Django`會將`QuerySet`轉換為`SQL`去執行
阿新 • • 發佈:2018-12-20
什麼時候Django
會將QuerySet
轉換為SQL
去執行
生成一個QuerySet
物件並不會馬上轉換為SQL
語句去執行。
比如我們獲取Book
表下所有的圖書:
books = Book.objects.all()
print(connection.queries)
我們可以看到在列印connection.quries
的時候列印的是一個空的列表。說明上面的QuerySet
並沒有真正的執行。
在以下情況下QuerySet
會被轉換為SQL
語句執行:
-
迭代:在遍歷
QuerySet
物件的時候,會首先先執行這個SQL
語句,然後再把這個結果返回進行迭代。比如以下程式碼就會轉換為SQL
語句:for
-
使用步長(step)做切片操作:
QuerySet
可以類似於列表一樣做切片操作。做切片操作本身不會執行SQL
語句,但是如果如果在做切片操作的時候提供了步長,那麼就會立刻執行SQL
語句。需要注意的是,做切片後不能再執行filter
方法,否則會報錯。 -
呼叫
len
函式:呼叫len
函式用來獲取QuerySet
中總共有多少條資料也會立刻執行SQL
語句。 -
呼叫
list
函式:呼叫list
函式用來將一個QuerySet
物件轉換為list
物件也會立刻執行SQL
語句。 -
判斷:如果對某個
QuerySet
進行判斷,也會立刻執行SQL