Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django中的动态按请求数据库连接_Python_Django - Fatal编程技术网

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

Python Django中的动态按请求数据库连接,python,django,Python,Django,我正在构建一个集中式django应用程序,它将与具有基本相同模式的动态数据库进行交互。这些数据库还被一些遗留应用程序使用,其中一些是PHP。我们的解决方案是将这些信息存储在各个应用程序之外的通用设置文件中,以避免数据库凭证的多个筒仓。可以创建、更改或删除设置文件,而无需重新启动django应用程序 对于django应用程序的每个请求,都会有一个http头或url参数,可用于推断要查看的设置文件,以确定要使用的数据库凭据 我的第一个想法是使用定制的django中间件,该中间件将解析设置文件(可能带

我正在构建一个集中式django应用程序,它将与具有基本相同模式的动态数据库进行交互。这些数据库还被一些遗留应用程序使用,其中一些是PHP。我们的解决方案是将这些信息存储在各个应用程序之外的通用设置文件中,以避免数据库凭证的多个筒仓。可以创建、更改或删除设置文件,而无需重新启动django应用程序

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

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


有没有更优雅的方法来处理这种情况?在中间件方法中是否存在线程安全问题?

< P>可以用不同的<代码>设置。Py < /Cord>文件(通过在不同端口上设置不同的<代码> DjangoyStutsIsgSudioSudioS/Mult>),并将请求重定向到特定的应用程序。只要我的2美分。

当文件不太可能发生更改时,重读该文件是一种沉重的惩罚


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

由于涉及大量开销,这不是一个真正的选项,在实例数量和所需的系统级配置数量方面,我不太关心问题解析方面的成本,这就是我提到缓存的原因。如果推导出的数据库名还不存在,只需向settings.DATABASES添加更多条目,并在数据库连接错误时刷新即可。更大的问题是中间件方法是否正确,或者在请求/响应周期中是否太晚,或者是否容易出现线程安全问题。