例如,假设我有100个使用WordPress的客户机,我必须用Django编写一个服务,它应该从WordPress的MySQL数据库中返回posts的列表。问题是100个客户端有不同的数据库连接设置。在
我知道我可以使用DatabaseRouter
来切换已加载到设置中的数据库。但是我不知道如何使一个单个模型类使用不同的数据库设置。在
app_label
。在但后来我明白了,在Django中改变anyting意味着更少。在
我想创建一个模型并动态更改数据库连接。连接列表可以在managed
数据库表中。但我不想不必要地加载所有连接设置或创建多个模型。在
我做了一些类似的事情,但是为了改变mongodb的连接。 我创建了一个GenericView来选择连接并在getqueryset上使用它。在
我使用的是django rest框架,所以我做了这样的事情:
模型:
^{pr2}$您可能想看看}(这是{}的一个实例)。这将允许您动态地添加新的数据库配置,而无需对
django.db.connections
(在django/db/__init__.py
)和{settings.DATABASES
(实际上,ConnectionHandler
从settings.DATABASES
构建它的_databases
属性)。我不能肯定,因为我从来没有试过,但它应该归结为其中
connection_infos
是与settings.DATABASES
中预期的映射类似的映射。在然后主要是使用
^{pr2}$Queryset.using(alias)
进行查询,即:cfhttps://docs.djangoproject.com/en/1.11/topics/db/multi-db/#manually-selecting-a-database
这个IMHO的主要问题(假设您设法根据上述未经测试的建议进行了一些工作)是,您必须将数据库用户/密码存储在清晰的地方,这可能是一个主要的安全问题。我不知道你在数据库管理部分有多大的控制权,但是如果你能在所有这些数据库上添加一个具有相同密码(当然还有适当权限)的“django”用户,这样你就可以将密码保存在设置文件中,而不必将其保存在主数据库中。在
相关问题 更多 >
编程相关推荐