4

私はこれが存在することを知っています

django-admin.py inspectdb > models.py

しかし、それを制限する簡単な方法はありますか? 不要なものを手動で削除することなく。

100 を超えるテーブルを持つデータベースに接続していますが、必要なモデルは 4 つか 5 つだけです。いくつかのテーブルからモデルを簡単に生成する方法はありますか?

それらは非常に大きなテーブルなので、すべてを入力するのも好きではありません。

4

4 に答える 4

7

私はこれを自分でやっただけで、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と、より管理しやすくなります:)

于 2010-08-19T06:13:18.013 に答える
0

使用しないでくださいsyncdb > models.py。それは良い習慣ではありません。モデルを手動で作成して追加managed=Falseします。追加しない場合は、1つのコマンドですべてのデータベーステーブルを削除できます。モデルを作成したらsyncdb、テーブルがリンクされるようにを実行します。

于 2010-04-01T10:33:18.097 に答える
0

@pfctdayeliseによって与えられた次の解決策

django 1.8mysql バックエンドの場合

開い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 番目の引数TableInfotまたはvであるかどうかを判断するには、mysql クエリを実行し、それが であるかどうかを確認し、 2 番目の引数がelseであるかどうかSHOW FULL TABLESを調べます。table_typeBASE_TABLEtv

次に実行します

python manage.py inspectdb > models.py
于 2016-03-12T15:28:09.507 に答える