从数据库动态设置Django设置变量

时间:2018-07-10 16:36:02

标签: django python-3.x django-settings

我目前正在尝试构建一个管理多个数据库的应用程序。由于该应用将管理30多个数据库中的数据,因此我尝试在设置文件中生成DATABASE_ROUTERS。我无法直接将数据库模型导入设置文件。我收到此错误:

django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

此错误导致。有没有一种方法可以控制事件的顺序,以便在执行所有设置之前就可以访问数据库?我的目标是自动化数据库连接,从数据库中提取相关数据,并在设置文件中生成DATABASE_ROUTERS和DATABASES。这有可能吗?我可以下载一个完全可以做到这一点的软件包吗?

如果您不知道我在问什么,请不要拒绝投票,只是请我详细说明。

2 个答案:

答案 0 :(得分:0)

制作一个函数来加载此变量并使它异步,因此在应用就绪后就可以加载它,但是我不确定这是否可以正常工作

https://hackernoon.com/asynchronous-python-45df84b82434

Dirty Sollution (脏解决方案)是每个BD制作1个文件,然后根据BD可以使用的设置来调用设置...

答案 1 :(得分:0)

我能够弄清楚如何从数据库中查询所需的数据并将其导入到设置文件中。我在下面创建了脚本。请记住,这可以改进,这只是我从here修改而来的内容。这直接从我的测试数据库(sqlite3)查询数据。我在生产中使用了postgreSQL。经过一些修改后,该脚本应该可以在PostgreSQL上使用。

如下所示,我将数据存储在字典中,然后存储在列表中。然后,我将该字典列表导入到我的设置文件中。从那里,我可以遍历列表,并从数据库动态创建我的DATABASE_ROUTERS和DATABASES。通过导入相同的列表,我还能够在routers.py文件中生成路由器类。如果您需要我进一步阐述,请在下面评论。

CAST(cast(A.STMT_END_DT as date format 'YYYYMM') as CHAR(6))=CAST(cast(b.Past_due_fee_dt as date format 'YYYYMM') as CHAR(6))