我正在构建一个集中的django应用程序,它将与具有基本相同模式的动态数量的数据库进行交互。这些数据库也被一些遗留应用程序使用,其中一些应用程序使用PHP。我们的解决方案避免了多个数据库证书孤岛,它将这些信息存储在各个应用程序之外的通用设置文件中。设置文件可以创建,更改或删除,而不必重新启动django应用程序。Django中动态的每个请求数据库连接
对于每个向django应用程序发出的请求,都会有一个http头或一个url参数,它可以用来推断要查看哪个设置文件来确定要使用哪个数据库凭证。
我的第一个想法是使用自定义django中间件来解析设置文件(可能使用缓存),并在每个请求上创建一个新的连接对象,并在任何ORM活动之前将其修补为django.db。
有没有更优雅的方法来处理这种情况?有什么线程安全问题,我应该考虑与中间件方法?
我不在乎解析问题的成本,所以我提到了缓存。如果推导出的数据库名称尚不存在,只需在settings.DATABASES中添加更多条目并刷新数据库连接错误就相当简单。更大的问题是中间件方法是否正确,或者在请求/响应周期中是否太迟或者是否存在线程安全问题。 – GDorn
哦..不,中间件似乎是一个很好的选择。 – SingleNegationElimination