# Django 5.0.9.dev20240806133106 ドキュメント

# レガシーなデータベースと Django の統合

Django は新しいアプリケーションを開発するのに最適ですが、レガシーなデータベースと統合することも可能です。Django には、それを自動化するいくつかのユーティリティが含まれています。

このドキュメントは チュートリアル に書かれているような、Django についての基本的な知識を持っていることを想定しています。

Django のセットアップが完了したら、次の一般的なプロセスに従うことで、既存のデータベースと統合することができます。

## Django に既存データベースのパラメータを与える

まず、Django に既存のデータベース接続のパラメータとデータベースの名前を教えてあげる必要があります。そのために、設定ファイルの `DATABASES` を編集して、`'default'` 接続の以下のキーに対して値を設定します。

- `NAME`
- `ENGINE`
- `USER`
- `PASSWORD`
- `HOST`
- `PORT`

## モデルを自動生成する

Django には `inspectdb` と呼ばれるユーティリティが付属しており、既存のデータベースを調査することでモデルを作成できます。次のコマンドを実行すると出力が表示できます。

    $ python manage.py inspectdb

通常の Unix 出力のリダイレクトにより、ファイルとして保存します。

    $ python manage.py inspectdb > models.py

この機能は最終的なモデル生成ではなく、ショートカットとしての手段です。さらなる情報は、`documentation of inspectdb` を参照してください。

モデルをクリーンアップしたら、ファイルを `models.py` と名付け、アプリが含まれる Python パッケージの中に配置します。そして、アプリを `INSTALLED_APPS` の設定に追加します。

デフォルトでは、`inspectdb` は未管理 (unmanaged) なモデルを作成します。つまり、モデルの `Meta` クラス内の `managed = False` により、Django はテーブルの作成・変更・削除を管理しなくなります。

    class Person(models.Model):
        id = models.IntegerField(primary_key=True)
        first_name = models.CharField(max_length=70)

        class Meta:
            managed = False
            db_table = "CENSUS_PERSONS"

Django にテーブルのライフサイクルの管理を行ってほしい場合、上記の `managed` オプションを `True` に設定 (あるいは、`True` がデフォルト値なので削除) できます。

## core Django テーブルのインストール

次に、`migrate` コマンドを実行すると、追加で必要な admin 権限などのデータベースレコードがインストールされます。

    $ python manage.py migrate

## テストと修正

以上は基本的なステップです。ここからは、Django が生成したモデルを期待通りに動作するようになるまで微調整することになるでしょう。必要に応じて、Django データベース API 経由でデータにアクセスしたり、Django の admin サイトで objects を編集したり、models ファイルを編集してみてください。