sql >> Database teknologi >  >> NoSQL >> MongoDB

Sådan skriver du et python-program, der understøtter flere databaser

Django understøtter flere databaser så alt hvad du behøver er noget kode til at håndtere skift mellem dem.

Hvis du har læst dokumenterne, vil du se, at Django giver dig mulighed for at levere din egen tilpassede 'router'-klasse, som bestemmer, hvilken database der skal bruges til en given forespørgsel:
https://docs.djangoproject.com/en/1.6/topics/db/multi-db/# ved hjælp af routere

Da du siger, du vil vælge hvilken db "på frontend", så kunne hver bruger af dit websted formodentlig vælge en anden database-backend. Dette giver et problem, fordi db-routeren ikke ved noget om den aktuelle http-anmodning og bruger.

Jeg foreslår, at du bruger denne 'ThreadLocal' middleware til at gemme det aktuelle anmodningsobjekt, så du kan få adgang til det fra din brugerdefinerede router:
https://github.com/jedie/django-tools/blob/master/django_tools/middlewares/ThreadLocal.py

Lad os sige, at du gemmer brugerens valgte backend i sessionen som request.session['db_name'] - din router ville se sådan ud:

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. Kan ikke oprette forbindelse til MongoDb (ved hjælp af godkendelse) ved hjælp af mongocsharpdriver 2.7.0

  2. Udfladning af mongoDB-skema

  3. Meteor forbruger et stort antal Mongo-forbindelser

  4. MongoDB java driver 3.0 kan ikke fange undtagelse ved godkendelse