如何编写支持多个数据库的python应用程序

时间:2014-01-27 10:27:12

标签: django oracle mongodb python-2.7 database

我正在使用python(2.7),django和mongodb。我想创建一个支持多个数据库的应用程序(monogdb,oracle,Mysql等)。如果我们在前端选择oracle,那么数据应该保存在那样的oracle中。有没有办法写这个应用程序。

1 个答案:

答案 0 :(得分:2)

Django支持multiple databases所以你只需要一些代码来处理它们之间的切换。

如果您已阅读文档,您将看到Django允许您提供自己的自定义“路由器”类,该类决定用于任何给定查询的数据库:
https://docs.djangoproject.com/en/1.6/topics/db/multi-db/#using-routers

由于您说要在前端选择哪个数据库,因此可能是您网站的每个用户都可以选择不同的数据库后端。这提出了一个问题,因为db路由器对当前的http请求和用户一无所知。

我建议您使用此'ThreadLocal'中间件来存储当前请求对象,以便您可以从自定义路由器访问它:
https://github.com/jedie/django-tools/blob/master/django_tools/middlewares/ThreadLocal.py

假设您将用户选择的后端in the session保存为request.session['db_name'] - 您的路由器看起来像这样:

from django_tools.middlewares import ThreadLocal

class RequestRouter(object):
    def db_for_read(self, model, **hints):
        request = ThreadLocal.get_current_request()
        return request.session.get('db_name', 'default')

    def db_for_write(self, model, **hints):
        request = ThreadLocal.get_current_request()
        return request.session.get('db_name', 'default')

    def allow_relation(self, obj1, obj2, **hints):
        return True

    def allow_syncdb(self, db, model):
        return True