1. 程式人生 > >Django2.0-db(10)-什麼時候`Django`會將`QuerySet`轉換為`SQL`去執行

Django2.0-db(10)-什麼時候`Django`會將`QuerySet`轉換為`SQL`去執行

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

生成一個QuerySet物件並不會馬上轉換為SQL語句去執行。 比如我們獲取Book表下所有的圖書:

books = Book.objects.all()
print(connection.queries)

我們可以看到在列印connection.quries的時候列印的是一個空的列表。說明上面的QuerySet並沒有真正的執行。 在以下情況下QuerySet會被轉換為SQL語句執行:

  1. 迭代:在遍歷QuerySet物件的時候,會首先先執行這個SQL語句,然後再把這個結果返回進行迭代。比如以下程式碼就會轉換為SQL語句:

     for
    book in Book.objects.all(): print(book)
  2. 使用步長(step)做切片操作:QuerySet可以類似於列表一樣做切片操作。做切片操作本身不會執行SQL語句,但是如果如果在做切片操作的時候提供了步長,那麼就會立刻執行SQL語句。需要注意的是,做切片後不能再執行filter方法,否則會報錯。

  3. 呼叫len函式:呼叫len函式用來獲取QuerySet中總共有多少條資料也會立刻執行SQL語句。

  4. 呼叫list函式:呼叫list函式用來將一個QuerySet物件轉換為list物件也會立刻執行SQL語句。

  5. 判斷:如果對某個QuerySet進行判斷,也會立刻執行SQL

    語句。