我有一个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
任何人都可以强调这种方法的优缺点吗?我用这种方法看到的一个优点是我不必在我使用的每个数据库中维护一个表名列表。一个可能的缺点是我正在读取我的应用程序无法访问的那些表的名称。
答案 0 :(得分:0)
如果其他表不包含敏感信息,我认为这种方法没有问题。即,我会像这样概括这种情况:如果你有一个连接到数据库的应用程序,但没有使用该数据库的所有表,并且知道这些表存在本身就是一个安全问题 - 那么这些表应该不是不在那个数据库中。