常见问题:数据库和模型¶
如何查看 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
仅在 DEBUG
为 True
时可用。它是一个按查询执行顺序排列的字典列表。每个字典包含以下内容
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 对 schema migrations
的支持。
如果您不介意清除数据,则项目的 manage.py
实用程序具有一个 flush
选项,用于将数据库重置为执行 migrate
后立即的状态。
Django 模型是否支持多列主键?¶
不支持。仅支持单列主键。
但这在实践中不是问题,因为没有什么可以阻止您添加其他约束(使用 unique_together
模型选项或直接在数据库中创建约束),并在该级别强制唯一性。单列主键对于管理界面等功能的正常工作是必要的;例如,您需要一个单一的值来指定要编辑或删除的对象。
Django 是否支持 NoSQL 数据库?¶
Django 本身不正式支持 NoSQL 数据库。但是,有一些辅助项目和分支允许在 Django 中使用 NoSQL 功能。
您可以查看 维基页面,其中讨论了一些项目。
如何向我的 CREATE TABLE 语句添加特定于数据库的选项,例如指定 MyISAM 作为表类型?¶
我们尽量避免在 Django 代码中添加特殊情况来适应所有特定于数据库的选项,例如表类型等。如果您想使用任何这些选项,请使用 RunSQL
操作创建一个迁移,其中包含 ALTER TABLE
语句,这些语句可以执行您想要的操作。
例如,如果您使用的是 MySQL 并希望您的表使用 MyISAM 表类型,请使用以下 SQL
ALTER TABLE myapp_mytable ENGINE=MyISAM;