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