MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como escrever um aplicativo python que suporte vários bancos de dados


O Django suporta vários bancos de dados então tudo que você precisa é de algum código para lidar com a alternância entre eles.

Se você leu os documentos, verá que o Django permite que você forneça sua própria classe 'roteador' personalizada que decide qual banco de dados usar para qualquer consulta:
https://docs.djangoproject.com/en/1.6/topics/db/multi-db/# usando-roteadores

Como você diz que deseja selecionar qual banco de dados "no front-end", presumivelmente cada usuário do seu site pode escolher um back-end de banco de dados diferente. Isso apresenta um problema porque o roteador db não sabe nada sobre a solicitação http atual e o usuário.

Eu sugiro que você use este middleware 'ThreadLocal' para armazenar o objeto de solicitação atual para que você possa acessá-lo do seu roteador personalizado:
https://github.com/jedie/django-tools/blob/master/django_tools/middlewares/ThreadLocal.py

Digamos que você salve o back-end escolhido pelo usuário na sessão como request.session['db_name'] - seu roteador ficaria assim:
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