MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie man eine Python-Anwendung schreibt, die mehrere Datenbanken unterstützt

Django unterstützt mehrere Datenbanken Sie brauchen also nur etwas Code, um zwischen ihnen umzuschalten.

Wenn Sie die Dokumentation gelesen haben, werden Sie sehen, dass Sie mit Django Ihre eigene benutzerdefinierte „Router“-Klasse bereitstellen können, die entscheidet, welche Datenbank für eine bestimmte Abfrage verwendet werden soll:
https://docs.djangoproject.com/en/1.6/topics/db/multi-db/# using-router

Da Sie sagen, Sie möchten auswählen, welche Datenbank "am Frontend" ausgewählt werden soll, könnte vermutlich jeder Benutzer Ihrer Site ein anderes Datenbank-Backend auswählen. Dies stellt ein Problem dar, da der db-Router nichts über die aktuelle HTTP-Anforderung und den aktuellen Benutzer weiß.

Ich schlage vor, dass Sie diese „ThreadLocal“-Middleware verwenden, um das aktuelle Anforderungsobjekt zu speichern, damit Sie von Ihrem benutzerdefinierten Router aus darauf zugreifen können:
https://github.com/jedie/django-tools/blob/master/django_tools/middlewares/ThreadLocal.py

Angenommen, Sie speichern das vom Benutzer gewählte Backend in der Sitzung als request.session['db_name'] - Ihr Router würde in etwa so aussehen:

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