FAQ: Databases and models

How can I see the raw SQL queries Django is running?

请确保您的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仅在DEBUGTrue时可用。它是按照查询执行顺序的字典列表。每个字典有以下:

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

connection.queries包括所有SQL语句 - INSERT,UPDATES,SELECT等。每次您的应用程序命中数据库时,将记录查询。请注意,此处记录的SQL可能在SQLite下未正确引用incorrectly quoted under SQLite

如果您使用multiple databases,您可以在connections字典的每个成员上使用相同的接口:

>>> from django.db import connections
>>> connections['my_db_alias'].queries

如果你需要在函数中的任何时候手动清除查询列表,只需调用reset_queries(),就像这样:

from django.db import reset_queries
reset_queries()

Can I use Django with a pre-existing database?

是。请参阅Integrating with a legacy database

If I make changes to a model, how do I update the database?

看看Django对schema migrations的支持。

如果您不介意清除数据,您的项目的manage.py实用程序会使用flush选项将数据库重置为migrate

Do Django models support multiple-column primary keys?

没有。仅支持单列主键。

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

Does Django support NoSQL databases?

NoSQL数据库没有被Django本身正式支持。但是,有一些侧边项目和叉子允许Django中的NoSQL功能,如Django non-rel

您也可以在维基页面上查看,其中讨论了一些替代方法。

How do I add database-specific options to my CREATE TABLE statements, such as specifying MyISAM as the table type?

我们尽量避免在Django代码中添加特殊情况,以适应所有特定于数据库的选项,如表类型等。如果您要使用任何这些选项,请使用包含ALTER TABLE t3的RunSQL >语句,做你想做的事。

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

ALTER TABLE myapp_mytable ENGINE=MyISAM;