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'}]
只有当 DEBUG 为 True
时,connection.queries
才可用。它是按查询执行顺序排列的字典列表。每本词典都有以下内容:
sql
- 原始 SQL 语句time
- 语句执行所用的时间,以秒为单位。
connection.queries
包含了所有的SQL 语句 — INSERT, UPDATES, 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 功能。
你可以查看 the wiki page 来探讨一些其他方案。
如何将特定于数据库的选项添加到我的 CREATE TABLE 语句中,例如将 MylSAM 指定为表类型?
我们尽量避免在 Django 代码中添加特例来容纳所有特定于数据库的选项,如表数据等。如果您想使用这些选项中的任何一个,请使用 RunSQL 操作来创建迁移,包含 ALTER TABLE
语句,它们可以执行您想要的操作。
例如,如果你正在使用 MySQL 并希望你的表使用 MyISAM 表类型,请使用以下 SQL:
ALTER TABLE myapp_mytable ENGINE=MyISAM;