Как написать приложение на Python, поддерживающее несколько баз данных
Я использую python(2.7),django, с mongodb. Я хочу создать приложение, которое поддерживает несколько баз данных (monogdb,oracle,Mysql и т. Д.). Значит, если мы выберем oracle на внешнем интерфейсе, данные должны быть сохранены в oracle, как Есть ли способ написать это приложение.
1 ответ
Django поддерживает несколько баз данных, поэтому все, что вам нужно, это некоторый код для переключения между ними.
Если вы прочитали документы, вы увидите, что Django позволяет вам предоставить свой собственный класс "router", который решает, какую базу данных использовать для любого данного запроса:
https://docs.djangoproject.com/en/1.6/topics/db/multi-db/
Так как вы говорите, что хотите выбрать, какой db "на переднем конце", то, вероятно, каждый пользователь вашего сайта может выбрать другую базу данных. Это создает проблему, потому что маршрутизатор db ничего не знает о текущем HTTP-запросе и пользователе.
Я предлагаю вам использовать это промежуточное программное обеспечение ThreadLocal для хранения текущего объекта запроса, чтобы вы могли получить к нему доступ со своего пользовательского маршрутизатора:
https://github.com/jedie/django-tools/blob/master/django_tools/middlewares/ThreadLocal.py
Допустим, вы сохранили выбранный пользовательский бэкэнд в сеансе как request.session['db_name']
- ваш роутер будет выглядеть примерно так:
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