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对数据模型改动的支持:schema migrations
(模型迁移)
如果你不介意清除数据,工程目录下的 manage.py
工具使用 flush
选项去立即重置数据库到 执行 migrate
后的状态
Django 支持多列主键吗?¶
不,只支持单列主键。
但这在实践中并不是一个问题,因为无法阻止你添加其他的约束(使用 unique_together
模型选项或者在你的数据库中直接创建约束),并在这一级上强化唯一性。管理界面需要单列主键才能工作;例如,你需要唯一值来指定要编辑或删除的对象。
Django 支持 NoSQL 数据库吗?¶
Django 官方不支持 NoSQL 数据库。然而,存在一些其他项目和分支允许在 Django 中使用 NoSQL 功能。
你可以查看 the wiki page 来探讨一些其他方案。