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