私はこれが存在することを知っています
django-admin.py inspectdb > models.py
しかし、それを制限する簡単な方法はありますか? 不要なものを手動で削除することなく。
100 を超えるテーブルを持つデータベースに接続していますが、必要なモデルは 4 つか 5 つだけです。いくつかのテーブルからモデルを簡単に生成する方法はありますか?
それらは非常に大きなテーブルなので、すべてを入力するのも好きではありません。
私はこれが存在することを知っています
django-admin.py inspectdb > models.py
しかし、それを制限する簡単な方法はありますか? 不要なものを手動で削除することなく。
100 を超えるテーブルを持つデータベースに接続していますが、必要なモデルは 4 つか 5 つだけです。いくつかのテーブルからモデルを簡単に生成する方法はありますか?
それらは非常に大きなテーブルなので、すべてを入力するのも好きではありません。
私はこれを自分でやっただけで、Oracleも使用しています。それは可能ですが、きれいではありません。
必要なテーブルの名前を知っていると仮定します-
開くdjango/db/backends/oracle/introspection.py
。機能がありますget_table_list
:
def get_table_list(self, cursor):
"Returns a list of table names in the current database."
cursor.execute("SELECT TABLE_NAME FROM USER_TABLES")
return [row[0].lower() for row in cursor.fetchall()]
のようなものに置き換えるだけです
def get_table_list(self, cursor):
names = ['mytable1', 'mytable2', 'mytable3']
return names
次に、あなたを実行するinspectdb
と、より管理しやすくなります:)
使用しないでくださいsyncdb > models.py
。それは良い習慣ではありません。モデルを手動で作成して追加managed=False
します。追加しない場合は、1つのコマンドですべてのデータベーステーブルを削除できます。モデルを作成したらsyncdb
、テーブルがリンクされるようにを実行します。
@pfctdayeliseによって与えられた次の解決策
django 1.8
mysql バックエンドの場合
開いdjango/db/backends/mysql/introspection.py
て検索機能get_table_list
:
def get_table_list(self, cursor):
cursor.execute("SHOW FULL TABLES")
return [TableInfo(row[0], {'BASE TABLE': 't', 'VIEW': 'v'}.get(row[1]))
for row in cursor.fetchall()]
次のようなものに置き換えます
def get_table_list(self, cursor):
names = [TableInfo('mytable1', 't')]
return names
の 2 番目の引数TableInfo
がt
またはv
であるかどうかを判断するには、mysql クエリを実行し、それが であるかどうかを確認し、 2 番目の引数がelseであるかどうかSHOW FULL TABLES
を調べます。table_type
BASE_TABLE
t
v
次に実行します
python manage.py inspectdb > models.py