sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man skriver en python-applikation som stöder flera databaser

Django stöder flera databaser så allt du behöver är lite kod för att kunna växla mellan dem.

Om du har läst dokumenten kommer du att se att Django låter dig tillhandahålla din egen anpassade "router"-klass som bestämmer vilken databas som ska användas för en given fråga:
https://docs.djangoproject.com/en/1.6/topics/db/multi-db/# använder routrar

Eftersom du säger att du vill välja vilken db "på frontend" så kan förmodligen varje användare av din webbplats välja en annan databasbackend. Detta utgör ett problem eftersom db-routern inte vet något om den aktuella http-förfrågan och användaren.

Jag föreslår att du använder den här "ThreadLocal"-mellanvaran för att lagra det aktuella förfrågningsobjektet så att du kan komma åt det från din anpassade router:
https://github.com/jedie/django-tools/blob/master/django_tools/middlewares/ThreadLocal.py

Låt oss säga att du sparar användarens valda backend i sessionen som request.session['db_name'] - din router skulle se ut ungefär så här:

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



  1. Mongorestore i en Dockerfile

  2. Vad är skillnaden mellan en changeStream och tailable cursor i MongoDB

  3. Kopiera databas i Mongoose

  4. Arbeta med nycklar i redis