У меня есть приложение django, которое обращается к базе данных, с которой общаются несколько других моих приложений. Когда приложение запускается, оно читает разные таблицы в разных базах данных и использует его, чтобы определить, какое соединение использовать для какой таблицы.
Это хорошая практика или плохая практика, позволяющая приложению читать все имена таблиц в
таким образом?
ниже приводится выдержка из моего 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
Кто-нибудь может выделить плюсы и минусы такого подхода? Одно из преимуществ этого подхода заключается в том, что мне не нужно вести список имен таблиц в каждой базе данных, которую я использую. Одним из возможных недостатков является то, что я читаю даже имена тех таблиц, к которым у моего приложения нет доступа.