Django hỗ trợ nhiều cơ sở dữ liệu vì vậy tất cả những gì bạn cần là một số mã để xử lý việc chuyển đổi giữa chúng.
Nếu bạn đã đọc tài liệu, bạn sẽ thấy rằng Django cho phép bạn cung cấp lớp 'bộ định tuyến' tùy chỉnh của riêng bạn, lớp quyết định cơ sở dữ liệu nào sẽ sử dụng cho bất kỳ truy vấn nhất định nào:
https://docs.djangoproject.com/en/1.6/topics/db/multi-db/# sử dụng bộ định tuyến
Vì bạn nói rằng bạn muốn chọn db "trên giao diện người dùng" nên có lẽ mỗi người dùng trang web của bạn có thể chọn một chương trình phụ trợ cơ sở dữ liệu khác nhau. Điều này gây ra sự cố vì bộ định tuyến db không biết gì về người dùng và yêu cầu http hiện tại.
Tôi khuyên bạn nên sử dụng phần mềm trung gian 'ThreadLocal' này để lưu trữ đối tượng yêu cầu hiện tại để bạn có thể truy cập nó từ bộ định tuyến tùy chỉnh của mình:
https://github.com/jedie/django-tools/blob/master/django_tools/middlewares/ThreadLocal.py
Giả sử bạn lưu phần phụ trợ đã chọn của người dùng trong phiên dưới dạng request.session['db_name']
- bộ định tuyến của bạn sẽ trông giống như sau:
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