{"title":"レガシーなデータベースと Django の統合","version":"3.2","locale":"ja","docname":"howto/legacy-databases","url":"/ja/3.2/howto/legacy-databases/","canonical":"https://djangodocs.dev/ja/3.2/howto/legacy-databases/","summary":"Django は新しいアプリケーションを開発するのに最適ですが、レガシーなデータベースと統合することも可能です。Django には、それを自動化するいくつかのユーティリティが含まれています。 このドキュメントは チュートリアル に書かれているような、Django についての基本的な知識を持っていることを想定しています。…","html":"<h1>レガシーなデータベースと Django の統合<a class=\"heading-anchor\" href=\"#integrating-django-with-a-legacy-database\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Django は新しいアプリケーションを開発するのに最適ですが、レガシーなデータベースと統合することも可能です。Django には、それを自動化するいくつかのユーティリティが含まれています。</p>\n<p>このドキュメントは <a class=\"reference internal\" href=\"/ja/3.2/intro/tutorial01/\"><span class=\"doc\">チュートリアル</span></a> に書かれているような、Django についての基本的な知識を持っていることを想定しています。</p>\n<p>Django のセットアップが完了したら、次の一般的なプロセスに従うことで、既存のデータベースと統合することができます。</p>\n<section id=\"give-django-your-database-parameters\">\n<h2>Django に既存データベースのパラメータを与える<a class=\"heading-anchor\" href=\"#give-django-your-database-parameters\"><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/3.2/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\">DATABASES</code></a> を編集して、<code class=\"docutils literal notranslate\">'default'</code> 接続の以下のキーに対して値を設定します。</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/ja/3.2/ref/settings/#std-setting-NAME\"><code class=\"xref std std-setting docutils literal notranslate\">NAME</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/3.2/ref/settings/#std-setting-DATABASE-ENGINE\"><code class=\"xref std std-setting docutils literal notranslate\">ENGINE</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/3.2/ref/settings/#std-setting-USER\"><code class=\"xref std std-setting docutils literal notranslate\">USER</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/3.2/ref/settings/#std-setting-PASSWORD\"><code class=\"xref std std-setting docutils literal notranslate\">PASSWORD</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/3.2/ref/settings/#std-setting-HOST\"><code class=\"xref std std-setting docutils literal notranslate\">HOST</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/3.2/ref/settings/#std-setting-PORT\"><code class=\"xref std std-setting docutils literal notranslate\">PORT</code></a></p></li>\n</ul>\n</section>\n<section id=\"auto-generate-the-models\">\n<h2>モデルを自動生成する<a class=\"heading-anchor\" href=\"#auto-generate-the-models\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django comes with a utility called <a class=\"reference internal\" href=\"/ja/3.2/ref/django-admin/#django-admin-inspectdb\"><code class=\"xref std std-djadmin docutils literal notranslate\">inspectdb</code></a> that can create models\nby introspecting an existing database. You can view the output by running this\ncommand:</p>\n<div class=\"code-block\" data-language=\"bash\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code>$ python manage.py inspectdb\n</code></pre></div>\n<p>Save this as a file by using standard Unix output redirection:</p>\n<div class=\"code-block\" data-language=\"bash\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code>$ python manage.py inspectdb &gt; models.py\n</code></pre></div>\n<p>This feature is meant as a shortcut, not as definitive model generation. See the\n<a class=\"reference internal\" href=\"/ja/3.2/ref/django-admin/#django-admin-inspectdb\"><code class=\"xref std std-djadmin docutils literal notranslate\">documentation of inspectdb</code></a> for more information.</p>\n<p>Once you've cleaned up your models, name the file <code class=\"docutils literal notranslate\">models.py</code> and put it in\nthe Python package that holds your app. Then add the app to your\n<a class=\"reference internal\" href=\"/ja/3.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> setting.</p>\n<p>By default, <a class=\"reference internal\" href=\"/ja/3.2/ref/django-admin/#django-admin-inspectdb\"><code class=\"xref std std-djadmin docutils literal notranslate\">inspectdb</code></a> creates unmanaged models. That is,\n<code class=\"docutils literal notranslate\">managed = False</code> in the model's <code class=\"docutils literal notranslate\">Meta</code> class tells Django not to manage\neach table's creation, modification, and deletion:</p>\n<div class=\"code-block\" data-language=\"bash\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code>class Person<span class=\"o\">(</span>models.Model<span class=\"o\">)</span>:\n    <span class=\"nv\">id</span> <span class=\"o\">=</span> models.IntegerField<span class=\"o\">(</span><span class=\"nv\">primary_key</span><span class=\"o\">=</span>True<span class=\"o\">)</span>\n    <span class=\"nv\">first_name</span> <span class=\"o\">=</span> models.CharField<span class=\"o\">(</span><span class=\"nv\">max_length</span><span class=\"o\">=</span><span class=\"m\">70</span><span class=\"o\">)</span>\n    class Meta:\n       <span class=\"nv\">managed</span> <span class=\"o\">=</span> False\n       <span class=\"nv\">db_table</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;CENSUS_PERSONS&#39;</span>\n</code></pre></div>\n<p>If you do want to allow Django to manage the table's lifecycle, you'll need to\nchange the <a class=\"reference internal\" href=\"/ja/3.2/ref/models/options/#django.db.models.Options.managed\" title=\"django.db.models.Options.managed\"><code class=\"xref py py-attr docutils literal notranslate\">managed</code></a> option above to <code class=\"docutils literal notranslate\">True</code>\n(or remove it because <code class=\"docutils literal notranslate\">True</code> is its default value).</p>\n</section>\n<section id=\"install-the-core-django-tables\">\n<h2>Install the core Django tables<a class=\"heading-anchor\" href=\"#install-the-core-django-tables\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Next, run the <a class=\"reference internal\" href=\"/ja/3.2/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\">migrate</code></a> command to install any extra needed database\nrecords such as admin permissions and content types:</p>\n<div class=\"code-block\" data-language=\"bash\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code>$ python manage.py migrate\n</code></pre></div>\n</section>\n<section id=\"test-and-tweak\">\n<h2>テストと修正<a class=\"heading-anchor\" href=\"#test-and-tweak\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Those are the basic steps -- from here you'll want to tweak the models Django\ngenerated until they work the way you'd like. Try accessing your data via the\nDjango database API, and try editing objects via Django's admin site, and edit\nthe models file accordingly.</p>\n</section>","rootId":"integrating-django-with-a-legacy-database","toc":[{"title":"Django に既存データベースのパラメータを与える","anchor":"give-django-your-database-parameters","children":[]},{"title":"モデルを自動生成する","anchor":"auto-generate-the-models","children":[]},{"title":"Install the core Django tables","anchor":"install-the-core-django-tables","children":[]},{"title":"テストと修正","anchor":"test-and-tweak","children":[]}],"breadcrumbs":[{"docname":"howto/index","title":"「How-to」ガイド","url":"/ja/3.2/howto/"}],"prev":{"docname":"howto/initial-data","title":"モデルに対する初期データを投入する","url":"/ja/3.2/howto/initial-data/"},"next":{"docname":"howto/outputting-csv","title":"Django で CSV を出力する","url":"/ja/3.2/howto/outputting-csv/"},"formats":{"html":"/ja/3.2/howto/legacy-databases/","markdown":"/ja/3.2/howto/legacy-databases.md","json":"/ja/3.2/howto/legacy-databases.json"},"source":"https://github.com/django/django/blob/stable/3.2.x/docs/howto/legacy-databases.txt","official":"https://docs.djangoproject.com/ja/3.2/howto/legacy-databases/","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","it","pt-br","ko","es","el","pl"]}