FAQ:資料庫與模型

如何查看 Django 正在執行的原始 SQL 查詢?

請確保您的 Django DEBUG 設定為 True。然後執行以下操作:

>>> from django.db import connection
>>> connection.queries
[{'sql': 'SELECT polls_polls.id, polls_polls.question, polls_polls.pub_date FROM polls_polls',
'time': '0.002'}]

connection.queries 僅在 DEBUGTrue 時可用。 它是一個依照查詢執行順序排列的字典列表。每個字典都包含以下內容:

  • sql - 原始 SQL 語句

  • time - 語句執行所花費的時間,以秒為單位。

connection.queries 包括所有 SQL 語句 – INSERT、UPDATE、SELECT 等。 每次您的應用程式訪問資料庫時,都會記錄該查詢。

如果您正在使用多個資料庫,您可以在 connections 字典的每個成員上使用相同的介面

>>> from django.db import connections
>>> connections["my_db_alias"].queries

如果您需要在函式中的任何位置手動清除查詢列表,請調用 reset_queries(),如下所示:

from django.db import reset_queries

reset_queries()

我可以使用 Django 搭配現有的資料庫嗎?

是的。請參閱與舊資料庫整合

如果我對模型進行更改,我該如何更新資料庫?

請查看 Django 對於結構 遷移 的支援。

如果您不介意清除資料,您專案的 manage.py 工具具有 flush 選項,可將資料庫重置為在執行 migrate 後立即的狀態。

Django 模型是否支援多欄主鍵?

否。僅支援單欄主鍵。

但這在實務上並不是問題,因為沒有任何東西會阻止您新增其他約束(使用 unique_together 模型選項或直接在資料庫中建立約束),並在該層級強制執行唯一性。單欄主鍵是管理介面等功能所必需的;例如,您需要單一值來指定要編輯或刪除的物件。

Django 是否支援 NoSQL 資料庫?

Django 本身並未正式支援 NoSQL 資料庫。然而,有許多附屬專案和分支允許在 Django 中使用 NoSQL 功能。

您可以在 Wiki 頁面上查看一些專案。

如何將資料庫特定選項新增至我的 CREATE TABLE 語句中,例如指定 MyISAM 作為表格類型?

我們嘗試避免在 Django 程式碼中新增特殊情況來容納所有資料庫特定的選項,例如表格類型等。如果您想使用任何這些選項,請建立一個遷移,其中包含一個 RunSQL 操作,其中包含執行您想要執行的操作的 ALTER TABLE 語句。

例如,如果您使用的是 MySQL 並希望您的表格使用 MyISAM 表格類型,請使用以下 SQL:

ALTER TABLE myapp_mytable ENGINE=MyISAM;
返回頂部