2014-01-27 22 views
0

我正在使用python(2.7),django和mongodb.I想創建支持多個數據庫(monogdb,oracle,Mysql等)的應用程序。如果我們選擇oracle的前端數據應該保存在oracle中,就像那樣。是否有任何方法來編寫該應用程序。如何編寫支持多個數據庫的python應用程序

+1

Django的已經支持[多個數據庫(https://docs.djangoproject.com/en/1.6/topics/db/multi-db/),那麼什麼是確切的問題你在面對? –

+0

@Burhan Khalid:坦克的答覆,雅支持。但我需要保存特定的數據庫時,用戶選擇數據庫。(如果你是所有者,你提供多個數據庫來保存用戶數據),我是你的網站,我需要保存我的數據在oracle.Then通過單擊oracle標籤我的數據將被保存在oracle.This是我想。如果你知道,請幫我。提前感謝 – Shiva

回答

2

Django支持multiple databases,所以你只需要一些代碼來處理它們之間的切換。

如果你讀過的文檔,你會看到Django的允許您提供自定義的「路由器」類,這決定其數據庫可用於任何給定的查詢:
https://docs.djangoproject.com/en/1.6/topics/db/multi-db/#using-routers

既然你說你要選擇哪個數據庫「在前端」,那麼大概每個用戶都可以選擇不同的數據庫後端。這提出了一個問題,因爲db路由器對當前的http請求和用戶一無所知。

我建議你使用這個「ThreadLocal的」中間件存儲當前的請求對象,因此您可以從您的自定義路由器訪問:
https://github.com/jedie/django-tools/blob/master/django_tools/middlewares/ThreadLocal.py

比方說,你的用戶選擇的後端in the session保存爲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 
相關問題