Django中的动态每请求数据库连接

时间:2011-07-21 18:26:30

标签: python django

我正在构建一个集中式django应用程序,它将与具有基本相同架构的动态数量的数据库进行交互。这些dbs也被一些遗留应用程序使用,其中一些是PHP。我们避免数据库凭证的多个孤岛的解决方案是将此信息存储在相应应用程序之外的通用设置文件中。可以在不重启django应用程序的情况下创建,更改或删除设置文件。

对于django应用程序的每个请求,都会有一个http标头或url参数,可用于推断要查看哪个设置文件以确定要使用的数据库凭据。

我的第一个想法是使用自定义django中间件来解析设置文件(可能使用缓存)并在每个请求上创建一个新的连接对象,在任何ORM活动之前将其修补到django.db。

有没有更优雅的方法来处理这种情况?我应该考虑使用中间件方法来解决任何线程安全问题吗?

2 个答案:

答案 0 :(得分:2)

当文件不太可能发生变化时,重新读取文件是一个很重要的惩罚。

我通常的方法是使用INotify监视配置文件更改,而不是尝试在每个请求上读取文件。另外,我倾向于保留一个“当前”配置,从文件中解析,只有在我完成解析配置文件并且我确定它有效后才用新值替换它。您可以通过在每个传入请求上设置当前配置来解决您对线程安全的一些担忧,这样配置就不会在请求的中途发生变化。

答案 1 :(得分:0)

您可以在不同的端口上使用不同的settings.py文件(通过设置不同的DJANGO_SETTINGS_MODULE)启动不同的实例,并将请求重定向到特定的应用程序。我的2美分。