# Django 2.2.9.dev20191202104323 文档

# 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, 等. 每次你的应用访问了数据库，查询都会被记录下来。

如果你在使用 multiple databases1，你可以对 `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` 模型选项或者在你的数据库中直接创建约束），并强化这一级别的独特性。管理员界面（admin interface）需要单列主键才能工作；例如，你需要一种能够指定要编辑或删除的对象的简单方法。

## Django 支持 NoSQL 数据库吗？

NoSQL databases are not officially supported by Django itself. There are, however, a number of side projects and forks which allow NoSQL functionality in Django.

You can take a look on the wiki page which discusses some projects.

## 如何将特定于数据库的选项添加到我的 CREATE TABLE 语句中，例如将 MylSAM 指定为表类型？

我们尽量避免在 Django 代码中添加特例来容纳所有特定于数据库的选项，如表数据等。如果您想使用这些选项中的任何一个，请使用：class : ~ django.db.migrations.operations.RunSQL 操作来创建迁移，包含＂ALTER TABLE＂语句，它们可以执行您想要的操作。

例如，如果你使用 MySQL 并且你想让你的数据表使用 MyISAM 表类型，使用如下 SQL 语句：

    ALTER TABLE myapp_mytable ENGINE=MyISAM;