sql >> Base de Datos >  >> NoSQL >> MongoDB

Cómo escribir una aplicación Python que admita múltiples bases de datos

Django admite varias bases de datos así que todo lo que necesita es un código para manejar el cambio entre ellos.

Si ha leído los documentos, verá que Django le permite proporcionar su propia clase de 'enrutador' personalizada que decide qué base de datos usar para cualquier consulta dada:
https://docs.djangoproject.com/en/1.6/topics/db/multi-db/# usando enrutadores

Dado que dice que desea seleccionar qué db "en el front-end", presumiblemente cada usuario de su sitio podría elegir un backend de base de datos diferente. Esto presenta un problema porque el enrutador db no sabe nada sobre la solicitud http actual y el usuario.

Le sugiero que use este middleware 'ThreadLocal' para almacenar el objeto de solicitud actual para que pueda acceder a él desde su enrutador personalizado:
https://github.com/jedie/django-tools/blob/master/django_tools/middlewares/ThreadLocal.py

Supongamos que guarda el backend elegido por el usuario en la sesión como request.session['db_name'] - su enrutador se vería así:

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