FAQ:数据库和模型 — Django 文档

来自菜鸟教程
Django/docs/3.2.x/faq/models
跳转至:导航、​搜索

常见问题:数据库和模型

如何查看 Django 正在运行的原始 SQL 查询?

确保您的 Django :setting:`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 仅在 :setting:`DEBUG`True 时可用。 它是按查询执行顺序排列的字典列表。 每本词典都有以下内容:

``sql`` -- The raw SQL statement
``time`` -- How long the statement took to execute, in seconds.

connection.queries 包括所有 SQL 语句——插入、更新、选择等。 每次您的应用访问数据库时,都会记录查询。

如果你使用多个数据库,你可以在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 实用程序有一个 :djadmin:`flush` 选项可以将数据库重置为 :djadmin 之后的状态:`migrate` 已执行。


Django 模型是否支持多列主键?

不。 仅支持单列主键。

但这在实践中不是问题,因为没有什么可以阻止您添加其他约束(使用 unique_together 模型选项或直接在数据库中创建约束),并在该级别强制执行唯一性。 管理界面等工作需要单列主键; 例如,您需要一个值来指定要编辑或删除的对象。


Django 支持 NoSQL 数据库吗?

Django 本身并不正式支持 NoSQL 数据库。 但是,有许多辅助项目和分支允许在 Django 中使用 NoSQL 功能。

您可以查看 维基页面 ,其中讨论了一些项目。


如何将特定于数据库的选项添加到我的 CREATE TABLE 语句中,例如将 MyISAM 指定为表类型?

我们尽量避免在 Django 代码中添加特殊情况以适应所有特定于数据库的选项,例如表类型等。 如果您想使用这些选项中的任何一个,请使用包含 ALTER TABLE 语句的 RunSQL 操作创建迁移,这些语句可以执行您想要执行的操作。

例如,如果您使用 MySQL 并希望您的表使用 MyISAM 表类型,请使用以下 SQL:

ALTER TABLE myapp_mytable ENGINE=MyISAM;