MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak napisać aplikację w Pythonie obsługującą wiele baz danych

Django obsługuje wiele baz danych więc wszystko, czego potrzebujesz, to trochę kodu do obsługi przełączania między nimi.

Jeśli przeczytałeś dokumentację, zobaczysz, że Django pozwala na dostarczenie własnej niestandardowej klasy 'router', która decyduje, której bazy danych użyć dla danego zapytania:
https://docs.djangoproject.com/en/1.6/topics/db/multi-db/# za pomocą routerów

Ponieważ mówisz, że chcesz wybrać bazę danych „na interfejsie”, prawdopodobnie każdy użytkownik Twojej witryny może wybrać inny backend bazy danych. Stanowi to problem, ponieważ router db nie wie nic o bieżącym żądaniu http i użytkowniku.

Proponuję użyć tego oprogramowania pośredniczącego „ThreadLocal” do przechowywania bieżącego obiektu żądania, aby można było uzyskać do niego dostęp z niestandardowego routera:
https://github.com/jedie/django-tools/blob/master/django_tools/middlewares/ThreadLocal.py

Załóżmy, że zapisujesz wybrany przez użytkownika backend w sesji jako request.session['db_name'] - Twój router wyglądałby mniej więcej tak:

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak wpisać wiele wierszy do listy rozdzielanej przecinkami w SQL?

  2. Usuń styl kaskadowy w Mongoose

  3. Czy można połączyć się z lokalnym MongoDB za pomocą rzutki flutter?

  4. Funkcja Mongodb findOneAndUpdate wstawia nowy dokument

  5. Jak wybrać najlepszy hosting MongoDB dla swojej firmy?