web-dev-qa-db-ja.com

データベースからDjangoモデルを生成できますか?

私はDjangoとDjango= ORMを自宅でいじくり回してきましたが、私はそれが最高の1つだと感じています使いやすさという点で。

しかし、「リバース」で使用できるかどうか疑問に思っていました。

基本的には、既存のデータベーススキーマ(Djangoを使用せず、かなり古いプロジェクト)からモデルを生成しますDjango)です。

これは可能ですか?

更新:問題のデータベースはOracle

79
TM.

はい、inspectdbコマンドを使用します。

inspectdb

DATABASE_NAME設定で指定されたデータベース内のデータベーステーブルを内省し、Django=モデルモジュール(models.pyファイル))を標準出力に出力します。

Djangoを使用するレガシーデータベースがある場合に使用します。スクリプトはデータベースを検査し、その中の各テーブルのモデルを作成します。

ご想像のとおり、作成されたモデルには、テーブル内のすべてのフィールドの属性があります。 inspectdbには、フィールド名の出力にいくつかの特殊なケースがあることに注意してください。

[...]

93
ars

(Django 1.7.1)python manage.py inspectdbを実行するだけで、データベース内のすべてのテーブルのクラスが作成され、コンソールに表示されます。

 $ python manage.py inspectdb

標準のUnix出力リダイレクトを使用して、これをファイルとして保存します。

 $ python manage.py inspectdb > models.py

(これはmysqlおよびDjango 1.9)で動作します)

28
KKlalala

Djangoのinspectdbコマンドユーティリティ Django Inspectdb Refactor に基づいて再利用可能なアプリを作成しました。

これにより、モデルは既存のデータベースからモデルフォルダー内の異なるファイルに分割されます。これにより、モデルが多数になったときにモデルを管理できます。

Pip経由でインストールできます:

pip install Django-inspectdb-refactor

次に、アプリをsettings.pyにinspectdb_refactorとして登録します

この後、コマンドラインから次のように使用できます。

python manage.py inspectdb_refactor --database=your_dbname_defined_in_settings --app=your_app_label

これにより、すべてのテーブルを含むモデルフォルダーがアプリ内の異なるモデルファイルとして正常に作成されます。例えば:

typical structure

詳細については、こちらをご覧ください こちら

6
not2acoder