1. 程式人生 > >什麼時候Django會將QuerySet轉換為SQL去執行:

什麼時候Django會將QuerySet轉換為SQL去執行:

 生成一個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語句。