2017-01-24 89 views
0

これは私のデータベースは、私はPythonのmanage.pyのinspectdbを行うと、私だけのためのクラスを取得する複数のスキーマ、例えば、アカウント、ログイン、通知など を持っている私のSettings.pydjangoでinspectdbを複数のmysqlスキーマに使用するには?

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'account', 
     'USER': 'xxxx', 
     'PASSWORD': 'xxxx', 
     'HOST': 'localhost', 
     'PORT': '3306' 
    } 
} 

内のデータベースの辞書です"account"スキーマのテーブルを使用していますが、すべてのスキーマのクラスが必要です。 私はpython manage.py inspectdb --database=loginをやってみましたが、私は

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'account', 
     'USER': 'xxxx', 
     'PASSWORD': 'xxxx', 
     'HOST': 'localhost', 
     'PORT': '3306' 
    }, 
    'login': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'login', 
     'USER': 'xxxx', 
     'PASSWORD': 'xxxx', 
     'HOST': 'localhost', 
     'PORT': '3306' 
    }, 
} 

に設定を変更した場合、私はpython manage.py inspectdb --database=loginを実行する上で、テーブルログインの適切なクラスを取得し、django.db.utils.ConnectionDoesNotExist例外

を取得します。しかし。しかし、問題は、これが手続きであるとすれば、DATABASESオプションでオプションを作る必要があります。これは、15以上のスキーマを持つため、実際には長くなります。良いことかどうか。

私はこれを行う正しい方法が何であるか知りたいと思います。

私はDjango 1.10.5です。

+0

は、なぜあなたは、単一のデータベースにすべてのテーブルを入れないのですか? – aumo

+0

@aumoできません。これはレガシーデータベースまたはライブアプリケーションであり、データベース内の何も変更することはできません。 –

答えて

1

Djangoは各データベースにアクセスする方法を知っておく必要があります。そのため、DATABASES設定で宣言することはできません。あなたの唯一の関心事は、読みやすさが緩んでいる場合は、ヘルパー関数を作成して反復を取り除くことができます。例えば

def local_db(name): 
    return { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': name, 
     'USER': 'xxxx', 
     'PASSWORD': 'xxxx', 
     'HOST': 'localhost', 
     'PORT': '3306', 
    } 

DATABASES = { 
    'default': local_db('account'), 
    'login': local_db('login'), 
    # Etc. 
} 

あなたが一度にすべてのデータベースを検査する場合は、あなたがそうするカスタムコマンドを作成することもできます。例えば

from django.conf import settings 
from django.core.management.commands.inspectdb import Command as BaseCommand 


class Command(BaseCommand): 
    def handle(self, **options): 
     for db_name in settings.DATABASES: 
      options['database'] = db_name 
      self.stdout.write('# Generated while inspecting database %s\n' % db_name) 
      super().handle(**options) 
+0

私が心配しているのは、このようにすると、 'login' dbのテーブルのすべてのモデルクラスを取得できないということです。 'inspectdb'の実行時に' default'dbのテーブルのモデルクラスを取得するだけです –

+0

'--database'オプションを指定しても? – aumo

+0

'--database'を指定すると、指定されたデータベースだけが来ます。それで、すべてのデータベースに指定する必要がありますか? –

関連する問題