{"title":"FAQ: データベースとモデル","version":"2.1","locale":"ja","docname":"faq/models","url":"/ja/2.1/faq/models/","canonical":"https://djangodocs.dev/ja/2.1/faq/models/","summary":"Django が実行している生の SQL クエリを見られますか？ Link to this heading # Djangoの設定ファイルの DEBUG が True になっていることを確認します。次に、以下のコードを実行します: Code Copy >>> from django.db import 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=\"/ja/2.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=\"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=\"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><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.queries</span></code> は <a class=\"reference internal\" href=\"/ja/2.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=\"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>``sql`` -- The raw SQL statement\n``time`` -- How long the statement took to execute, in seconds.\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.queries</span></code> にはINSERT, UPDATE, SELECTなどの全てのSQL文が記録されています。アプリケーションがデータベースを操作するたびに、クエリが記録されていきます。</p>\n<p>もし <a class=\"reference internal\" href=\"/ja/2.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=\"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=\"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=\"s1\">&#39;my_db_alias&#39;</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<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-pre-existing-database\">\n<h2>既存のデータベースで Django を使えますか？<a class=\"heading-anchor\" href=\"#can-i-use-django-with-a-pre-existing-database\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>使えます。<a class=\"reference internal\" href=\"/ja/2.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><a class=\"reference internal\" href=\"/ja/2.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\">スキーママイグレーション</span></code></a> に関するページを参照してください。</p>\n<p>データが消えてもかまわないのなら、 <code class=\"docutils literal notranslate\"><span class=\"pre\">manage.py</span></code> ユーティリティの <a class=\"reference internal\" href=\"/ja/2.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=\"/ja/2.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>いいえ。単一の主キーのみをサポートします。</p>\n<p>しかし、それは実際には問題でありません。なぜなら、(<code class=\"docutils literal notranslate\"><span class=\"pre\">unique_together</span></code> モデルオプション追加やデータベースに直接制約を作るというような) 他の制約を追加することを妨げないし、そのレベルでユニーク性を強制しているからです。単一カラムのプライマリーキーは admin インターフェースを動かすのに必要なのです。それにより、オブジェクトの更新や削除が容易になるからです。</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>NoSQL データベースは Django で公式にはサポートされていません。しかし、<a class=\"reference external\" href=\"http://django-nonrel.org/\">Django non-rel</a> など、多くのプロジェクトが NoSQL を Django で利用できるような機能を提供しています。</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>MyISAM ストレージエンジンを指定するといったような <code class=\"docutils literal notranslate\"><span class=\"pre\">CREATE</span> <span class=\"pre\">TABLE</span></code> 文のデータベース固有のカスタマイズを追加するにはどうしたらよいでしょうか？<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 コード中に特殊なケースを追加するのを避けようとします。データベース固有のオプションを使いたければ、あなたが指定したい <code class=\"docutils literal notranslate\"><span class=\"pre\">ALTER</span> <span class=\"pre\">TABLE</span></code> 文を含めた <a class=\"reference internal\" href=\"/ja/2.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> を使ったマイグレーションを作成してください。</p>\n<p>たとえば、 MySQL を使っていて、 MyISAM ストレージエンジンを使いたい場合、以下のSQLを使ってください:</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=\"n\">ALTER</span> <span class=\"n\">TABLE</span> <span class=\"n\">myapp_mytable</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-pre-existing-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":"MyISAM ストレージエンジンを指定するといったような CREATE TABLE 文のデータベース固有のカスタマイズを追加するにはどうしたらよいでしょうか？","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":"/ja/2.1/faq/"}],"prev":{"docname":"faq/help","title":"FAQ: 助けを求める","url":"/ja/2.1/faq/help/"},"next":{"docname":"faq/admin","title":"FAQ: 管理インタフェース","url":"/ja/2.1/faq/admin/"},"formats":{"html":"/ja/2.1/faq/models/","markdown":"/ja/2.1/faq/models.md","json":"/ja/2.1/faq/models.json"},"source":"https://github.com/django/django/blob/stable/2.1.x/docs/faq/models.txt","official":"https://docs.djangoproject.com/ja/2.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","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","pt-br","ko","es","el","pl"]}