sql >> Databáze >  >> NoSQL >> MongoDB

Jak napsat pythonovou aplikaci, která podporuje více databází

Django podporuje více databází takže vše, co potřebujete, je nějaký kód, který zvládne přepínání mezi nimi.

Pokud jste si přečetli dokumenty, uvidíte, že Django vám umožňuje zadat svou vlastní třídu „router“, která rozhoduje, kterou databázi použít pro daný dotaz:
https://docs.djangoproject.com/en/1.6/topics/db/multi-db/# using-routers

Protože říkáte, že chcete vybrat, kterou db „na frontendu“, pak by si pravděpodobně každý uživatel vašeho webu mohl vybrat jiný databázový backend. To představuje problém, protože db router neví nic o aktuálním http požadavku a uživateli.

Navrhuji, abyste použili tento middleware 'ThreadLocal' k uložení aktuálního objektu požadavku, abyste k němu měli přístup ze svého vlastního routeru:
https://github.com/jedie/django-tools/blob/master/django_tools/middlewares/ThreadLocal.py

Řekněme, že uložíte uživatelem zvolený backend v relaci jako request.session['db_name'] - váš router by vypadal nějak takto:

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. Spring Data mongo - vydání s kolekcí Distinct

  2. Jak načíst více souborů js do databáze pomocí mongo shell?

  3. Způsobeno:java.lang.IllegalArgumentException:CONTAINING (1):[IsConifying, Containing, Contains] není podporováno pro odvození dotazu redis - Redis

  4. Javascript api na straně klienta Mongodb