Django поддържа множество бази данни така че всичко, от което се нуждаете, е някакъв код, който да управлява превключването между тях.
Ако сте прочели документите, ще видите, че Django ви позволява да предоставите свой собствен персонализиран клас „рутер“, който решава коя база данни да се използва за дадена заявка:
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