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
只有在 DEBUG
为 ``True``时才可用. 它是按顺序执行的字典列表,每个字典包括:
- ``sql`` -- The raw SQL statement
- ``time`` -- How long the statement took to execute, in seconds.
connection.queries
包含了所有的SQL 语句 — INSERT, UPDATES, SELECT, 等. 每次你的应用访问了数据库,查询都会被记录下来。
如果你在使用:doc:multiple databases1,, 你可以对connections
字典::中每个成员使用相同的接口。
- >>> from django.db import connections
- >>> connections['my_db_alias'].queries
如果你需要在你的函数中去手动的清空所有的查询点,只需要调用reset_queries()
, 像这样:
- from django.db import reset_queries
- reset_queries()
我可以让Django用一个之前已经存在的数据库吗?
是的,可以看这篇文档:Integrating with a legacy database 1。
如果我对一个模型做了改动,我该如何去更新数据库?
看看Django对数据模型改动的支持:schema migrations
(模型迁移)
如果你不介意清除数据,工程目录下的manage.py
工具使用 flush
选项去立即重置数据库到 执行 migrate
后的状态
Django支持多列主键吗?
不,只支持单列主键。
但这在实践中并不是一个问题,因为无法阻止你添加其他的约束(使用 unique_together
模型选项或者在你的数据库中直接创建约束),并强化这一级别的独特性。管理员界面(admin interface)需要单列主键才能工作;例如,你需要一种能够指定要编辑或删除的对象的简单方法。
Django 支持 NoSQL 数据库吗?
Django 官方不支持 NoSQL 数据库,不过有一些项目和拷贝向 Django 中添加了 NoSQL 的功能,如:Django non-rel
你也可以看一下the wiki page
_ 来讨论一些替代方案。
如何将特定于数据库的选项添加到我的 CREATE TABLE 语句中,例如将 MylSAM 指定为表类型?
我们尽量避免在 Django 代码中添加特例来容纳所有特定于数据库的选项,如表数据等。如果您想使用这些选项中的任何一个,请使用:class : ~ django.db.migrations.operations.RunSQL 操作来创建迁移,包含"ALTER TABLE"语句,它们可以执行您想要的操作。
例如,如果你使用 MySQL 并且你想让你的数据表使用 MyISAM 表类型,使用如下 SQL 语句:
- ALTER TABLE myapp_mytable ENGINE=MyISAM;