データベースからdjangoモデルを生成することは可能ですか?


90

私は自宅でDjangoとDjango ORMをいじくり回してきましたが、使いやすさの点で最も優れていると感じています。

しかし、「リバース」で使えるのかと思っていました。

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

これは可能ですか?

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

回答:


105

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

inspectdb

DATABASE_NAME設定が指すデータベース内のデータベーステーブルをイントロスペクトし、Djangoモデルモジュール(models.pyファイル)を標準出力に出力します。

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

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

[...]


1
その情報を読むと、それはmysql、sqlite、postgresqlでサポートされていると書かれています。悲しいことに、私が使用しようとしていますデータベースは、Oracleである:(
。TM

ちなみに、現時点ではDjangoがOracleを順方向または逆方向にサポートしているとは思いません:/
AlbertoPL 2009

3
Djangoには、考えられるほぼすべての機能があります。それは何年も使用した後でも私を驚かせます。
Divick 2016

わからないけど...リンクがdevバージョンを参照していることを指摘する必要があるかもしれません(もっと強調して??おそらくそうではないかもしれません。)
フェデリコガロ

新しいテーブルが挿入されたときに同じコマンドを使用できますか
selvakumar

33

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

 $ python manage.py inspectdb

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

 $ python manage.py inspectdb > models.py

(これはmysqlとdjango 1.9で動作します)


10

私は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

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

典型的な構造

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


ここにもう少し説明を追加します
Mathews Sunny

python3 manage.py inspectdb_refactor --database = xmldb --app = django_sb_adminエラー:不明なコマンド: 'inspectdb_refactor'使用方法は「manage.py help」と入力してください。
ali reza 2018

このアプリをsettings.pyにinspectdb_refactorとして登録しましたか?
not2acoder 2018

このエラーが発生していget_meta() missing 1 required positional argument: 'is_partition'ます。django 2.0の使用
LTroya
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.