---
title: "FAQ：数据库和模型"
version: 5.2
locale: zh-hans
source: https://docs.djangoproject.com/zh-hans/5.2/faq/models/
canonical: https://djangodocs.dev/zh-hans/5.2/faq/models/
---
# FAQ：数据库和模型

## 我该如何在Django运行的过程中看到SQL查询？

确保你的 Django 配置中的 [`DEBUG`](/zh-hans/5.2/ref/settings/#std-setting-DEBUG) 设置为 `True`。然后执行以下操作：

```pycon
>>> 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`](/zh-hans/5.2/ref/settings/#std-setting-DEBUG) 为 `True` 时，`connection.queries` 才可用。它是按查询执行顺序排列的字典列表。每本词典都有以下内容：

- `sql` \- 原始 SQL 语句
- `time` \- 语句执行所用的时间，以秒为单位。

`connection.queries` 包含了所有的SQL 语句 -- INSERT, UPDATES, SELECT, 等. 每次你的应用访问了数据库，查询都会被记录下来。

如果你正在使用 [多数据库](/zh-hans/5.2/topics/db/multi-db/)，则可以在 `connections` 字典的每个成员上使用相同的接口：

```pycon
>>> from django.db import connections
>>> connections["my_db_alias"].queries
```

如果需要在函数中的任何位置手动清除查询列表，只需要调用 `reset_queries()`，像这样：

```
from django.db import reset_queries

reset_queries()
```

## 我可以让 Django 使用一个已经存在的数据库吗？

是的，可以看这篇文档 [导入已有数据库](/zh-hans/5.2/howto/legacy-databases/)。

## 如果我对一个模型做了改动，我该如何去更新数据库？

看看Django对数据模型改动的支持：[`schema migrations`](/zh-hans/5.2/topics/migrations/#module-django.db.migrations) （模型迁移）

如果你不介意清除数据，工程目录下的 `manage.py` 工具使用 [`flush`](/zh-hans/5.2/ref/django-admin/#django-admin-flush) 选项去立即重置数据库到 执行 [`migrate`](/zh-hans/5.2/ref/django-admin/#django-admin-migrate) 后的状态

## Django 支持多列主键吗？

不，只支持单列主键。

但这在实践中并不是一个问题，因为无法阻止你添加其他的约束（使用 `unique_together` 模型选项或者在你的数据库中直接创建约束），并在这一级上强化唯一性。管理界面需要单列主键才能工作；例如，你需要唯一值来指定要编辑或删除的对象。

## Django 支持 NoSQL 数据库吗？

Django 官方不支持 NoSQL 数据库。然而，存在一些其他项目和分支允许在 Django 中使用 NoSQL 功能。

你可以查看 [the wiki page](https://code.djangoproject.com/wiki/NoSqlSupport) 来探讨一些其他方案。

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

我们尽量避免在 Django 代码中添加特例来容纳所有特定于数据库的选项，如表数据等。如果您想使用这些选项中的任何一个，请使用 [`RunSQL`](/zh-hans/5.2/ref/migration-operations/#django.db.migrations.operations.RunSQL) 操作来创建迁移，包含 `ALTER TABLE` 语句，它们可以执行您想要的操作。

例如，如果你正在使用 MySQL 并希望你的表使用 MyISAM 表类型，请使用以下 SQL：

```sql
ALTER TABLE myapp_mytable ENGINE=MyISAM;
```
