{"title":"FAQ：数据库和模型","version":"6.1","locale":"zh-hans","docname":"faq/models","url":"/zh-hans/6.1/faq/models/","canonical":"https://djangodocs.dev/zh-hans/6.1/faq/models/","summary":"我该如何在Django运行的过程中看到SQL查询？ Link to this heading # 确保你的 Django 配置中的 DEBUG 设置为 True 。然后执行以下操作： Python console Copy >>> from django.db import connection >>> connection…","html":"<h1>FAQ：数据库和模型<a class=\"heading-anchor\" href=\"#faq-databases-and-models\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<section id=\"how-can-i-see-the-raw-sql-queries-django-is-running\">\n<span id=\"faq-see-raw-sql-queries\"></span><h2>我该如何在Django运行的过程中看到SQL查询？<a class=\"heading-anchor\" href=\"#how-can-i-see-the-raw-sql-queries-django-is-running\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>确保你的 Django 配置中的 <a class=\"reference internal\" href=\"/zh-hans/6.1/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a> 设置为 <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>。然后执行以下操作：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">connection</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">connection</span><span class=\"o\">.</span><span class=\"n\">queries</span>\n<span class=\"go\">[{&#39;sql&#39;: &#39;SELECT polls_polls.id, polls_polls.question, polls_polls.pub_date FROM polls_polls&#39;,</span>\n<span class=\"go\">&#39;time&#39;: &#39;0.002&#39;}]</span>\n</code></pre></div>\n<p>只有当 <a class=\"reference internal\" href=\"/zh-hans/6.1/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a> 为 <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> 时，<code class=\"docutils literal notranslate\"><span class=\"pre\">connection.queries</span></code> 才可用。它是按查询执行顺序排列的字典列表。每本词典都有以下内容：</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">sql</span></code> - 原始 SQL 语句</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">time</span></code> - 语句执行所用的时间，以秒为单位。</p></li>\n</ul>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.queries</span></code> 包含了所有的SQL 语句 -- INSERT, UPDATES, SELECT, 等. 每次你的应用访问了数据库，查询都会被记录下来。</p>\n<p>如果你正在使用 <a class=\"reference internal\" href=\"/zh-hans/6.1/topics/db/multi-db/\"><span class=\"doc\">多数据库</span></a>，则可以在 <code class=\"docutils literal notranslate\"><span class=\"pre\">connections</span></code> 字典的每个成员上使用相同的接口：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">connections</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">connections</span><span class=\"p\">[</span><span class=\"s2\">&quot;my_db_alias&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">queries</span>\n</code></pre></div>\n<p>如果需要在函数中的任何位置手动清除查询列表，只需要调用 <code class=\"docutils literal notranslate\"><span class=\"pre\">reset_queries()</span></code>，像这样：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">reset_queries</span>\n\n<span class=\"n\">reset_queries</span><span class=\"p\">()</span>\n</code></pre></div>\n</section>\n<section id=\"can-i-use-django-with-a-preexisting-database\">\n<h2>我可以让 Django 使用一个已经存在的数据库吗？<a class=\"heading-anchor\" href=\"#can-i-use-django-with-a-preexisting-database\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>是的，可以看这篇文档 <a class=\"reference internal\" href=\"/zh-hans/6.1/howto/legacy-databases/\"><span class=\"doc\">导入已有数据库</span></a>。</p>\n</section>\n<section id=\"if-i-make-changes-to-a-model-how-do-i-update-the-database\">\n<h2>如果我对一个模型做了改动，我该如何去更新数据库？<a class=\"heading-anchor\" href=\"#if-i-make-changes-to-a-model-how-do-i-update-the-database\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>看看Django对数据模型改动的支持：<a class=\"reference internal\" href=\"/zh-hans/6.1/topics/migrations/#module-django.db.migrations\" title=\"django.db.migrations: Schema migration support for Django models\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">schema</span> <span class=\"pre\">migrations</span></code></a> （模型迁移）</p>\n<p>如果你不介意清除数据，工程目录下的 <code class=\"docutils literal notranslate\"><span class=\"pre\">manage.py</span></code> 工具使用 <a class=\"reference internal\" href=\"/zh-hans/6.1/ref/django-admin/#django-admin-flush\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">flush</span></code></a> 选项去立即重置数据库到 执行 <a class=\"reference internal\" href=\"/zh-hans/6.1/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">migrate</span></code></a> 后的状态</p>\n</section>\n<section id=\"do-django-models-support-multiple-column-primary-keys\">\n<h2>Django 支持多列主键吗？<a class=\"heading-anchor\" href=\"#do-django-models-support-multiple-column-primary-keys\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Partially. See <a class=\"reference internal\" href=\"/zh-hans/6.1/topics/composite-primary-key/\"><span class=\"doc\">Composite primary keys</span></a>.</p>\n</section>\n<section id=\"does-django-support-nosql-databases\">\n<h2>Django 支持 NoSQL 数据库吗？<a class=\"heading-anchor\" href=\"#does-django-support-nosql-databases\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django 官方不支持 NoSQL 数据库。然而，存在一些其他项目和分支允许在 Django 中使用 NoSQL 功能。</p>\n<p>你可以查看 <a class=\"reference external\" href=\"https://code.djangoproject.com/wiki/NoSqlSupport\">the wiki page</a> 来探讨一些其他方案。</p>\n</section>\n<section id=\"how-do-i-add-database-specific-options-to-my-create-table-statements-such-as-specifying-myisam-as-the-table-type\">\n<h2>如何将特定于数据库的选项添加到我的 CREATE TABLE 语句中，例如将 MylSAM 指定为表类型？<a class=\"heading-anchor\" href=\"#how-do-i-add-database-specific-options-to-my-create-table-statements-such-as-specifying-myisam-as-the-table-type\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>我们尽量避免在 Django 代码中添加特例来容纳所有特定于数据库的选项，如表数据等。如果您想使用这些选项中的任何一个，请使用 <a class=\"reference internal\" href=\"/zh-hans/6.1/ref/migration-operations/#django.db.migrations.operations.RunSQL\" title=\"django.db.migrations.operations.RunSQL\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RunSQL</span></code></a> 操作来创建迁移，包含 <code class=\"docutils literal notranslate\"><span class=\"pre\">ALTER</span> <span class=\"pre\">TABLE</span></code> 语句，它们可以执行您想要的操作。</p>\n<p>例如，如果你正在使用 MySQL 并希望你的表使用 MyISAM 表类型，请使用以下 SQL：</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">ALTER</span><span class=\"w\"> </span><span class=\"k\">TABLE</span><span class=\"w\"> </span><span class=\"n\">myapp_mytable</span><span class=\"w\"> </span><span class=\"n\">ENGINE</span><span class=\"o\">=</span><span class=\"n\">MyISAM</span><span class=\"p\">;</span>\n</code></pre></div>\n</section>","rootId":"faq-databases-and-models","toc":[{"title":"我该如何在Django运行的过程中看到SQL查询？","anchor":"how-can-i-see-the-raw-sql-queries-django-is-running","children":[]},{"title":"我可以让 Django 使用一个已经存在的数据库吗？","anchor":"can-i-use-django-with-a-preexisting-database","children":[]},{"title":"如果我对一个模型做了改动，我该如何去更新数据库？","anchor":"if-i-make-changes-to-a-model-how-do-i-update-the-database","children":[]},{"title":"Django 支持多列主键吗？","anchor":"do-django-models-support-multiple-column-primary-keys","children":[]},{"title":"Django 支持 NoSQL 数据库吗？","anchor":"does-django-support-nosql-databases","children":[]},{"title":"如何将特定于数据库的选项添加到我的 CREATE TABLE 语句中，例如将 MylSAM 指定为表类型？","anchor":"how-do-i-add-database-specific-options-to-my-create-table-statements-such-as-specifying-myisam-as-the-table-type","children":[]}],"breadcrumbs":[{"docname":"faq/index","title":"Django FAQ","url":"/zh-hans/6.1/faq/"}],"prev":{"docname":"faq/help","title":"FAQ：获取帮助","url":"/zh-hans/6.1/faq/help/"},"next":{"docname":"faq/admin","title":"FAQ：管理","url":"/zh-hans/6.1/faq/admin/"},"formats":{"html":"/zh-hans/6.1/faq/models/","markdown":"/zh-hans/6.1/faq/models.md","json":"/zh-hans/6.1/faq/models.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/faq/models.txt","official":"https://docs.djangoproject.com/zh-hans/6.1/faq/models/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}