sql >> Database >  >> NoSQL >> MongoDB

Een python-toepassing schrijven die meerdere databases ondersteunt

Django ondersteunt meerdere databases dus alles wat je nodig hebt is wat code om tussen de twee te kunnen schakelen.

Als je de documenten hebt gelezen, zul je zien dat Django je toestaat om je eigen aangepaste 'router'-klasse te leveren die beslist welke database moet worden gebruikt voor een bepaalde vraag:
https://docs.djangoproject.com/en/1.6/topics/db/multi-db/# gebruik-routers

Aangezien u zegt dat u wilt selecteren welke db "aan de voorkant" is, zou elke gebruiker van uw site waarschijnlijk een andere database-backend kunnen kiezen. Dit levert een probleem op omdat de db-router niets weet over het huidige http-verzoek en de huidige gebruiker.

Ik raad u aan deze 'ThreadLocal'-middleware te gebruiken om het huidige verzoekobject op te slaan, zodat u het kunt openen vanaf uw aangepaste router:
https://github.com/jedie/django-tools/blob/master/django_tools/middlewares/ThreadLocal.py

Stel dat u de door de gebruiker gekozen backend in de sessie opslaat als request.session['db_name'] - uw router ziet er ongeveer zo uit:

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. Een database klonen/kopiëren in Azure Cosmos DB

  2. hoe mongodb-aggregaat te gebruiken en volledige documenten op te halen

  3. MongoDB:trek volledige sleutel:array-paar

  4. Fout:geen ondersteuning voor unix-sockets op Windows die mongodb verbindt