私は、私のいくつかの他のアプリケーションが話しているデータベースと会話するdjangoアプリケーションを持っています。アプリケーションが起動すると、異なるデータベースの異なるテーブルが読み込まれ、どのテーブルにどの接続を使用するかが決まります。アプリケーションはpg_catalogにアクセスできますか?
のようにすべてのテーブル名をアプリケーションが読み取れるようにすることをお勧めしますか?
次は私のrouters.pyからの抜粋です:
db1_tables = connections['db1'].introspection.table_names()
default_db_tables = connections['default'].introspection.table_names()
db3_tables = connections['db3'].introspection.table_names()
class MyAppRouter(object):
def db_for_read(self, model, **hints):
if model._meta.db_table in db1_tables :
return 'db1'
if model._meta.db_table in default_db_tables:
return 'default'
if model._meta.db_table in db3_tables:
return 'db3'
return 'default'
def db_for_write(self, model, **hints):
return self.db_for_read(model,**hints)
def allow_syncdb(self, db, model):
return False
誰もが、このアプローチの長所と短所を強調することはできますか?私がこのアプローチで見る利点の1つは、使用している各データベースにテーブル名のリストを保持する必要がないことです。私のアプリケーションがアクセスできないテーブルの名前さえも読んでいる可能性があります。
良い点!また、\ dtと似ていると思います –