MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment écrire une application Python prenant en charge plusieurs bases de données

Django prend en charge plusieurs bases de données donc tout ce dont vous avez besoin est un code pour gérer le basculement entre eux.

Si vous avez lu la documentation, vous verrez que Django vous permet de fournir votre propre classe de "routeur" personnalisée qui décide quelle base de données utiliser pour une requête donnée :
https://docs.djangoproject.com/en/1.6/topics/db/multi-db/# utilisation-routeurs

Puisque vous dites que vous voulez sélectionner quelle base de données "sur le front-end", chaque utilisateur de votre site pourrait probablement choisir un backend de base de données différent. Cela pose un problème car le routeur db ne sait rien de la requête http et de l'utilisateur actuels.

Je vous suggère d'utiliser ce middleware "ThreadLocal" pour stocker l'objet de requête actuel afin que vous puissiez y accéder depuis votre routeur personnalisé :
https://github.com/jedie/django-tools/blob/master/django_tools/middlewares/ThreadLocal.py

Supposons que vous sauvegardiez le backend choisi par l'utilisateur dans la session comme request.session['db_name'] - votre routeur ressemblerait à ceci :

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