2012-09-11 71 views
0

如何選擇數據庫路由器?我正在使用子域,如果例如app1.domain.de被路由,我想更改數據庫路由器。有人能幫幫我嗎?選擇數據庫路由器

DATABASES = {                                                        
'default': {                                                       
    'ENGINE': 'django.db.backends.sqlite3',                                                
    'NAME': os.path.join(SITE_ROOT, 'db') + '/default.db',                                             
    'USER': '',                                                       
    'PASSWORD': '',                                                      
    'HOST': '',                                                       
    'PORT': '',                                                       
},                                                          
'app1': {                                                       
    'ENGINE': 'django.db.backends.sqlite3',                                                
    'NAME': os.path.join(SITE_ROOT, 'db') + '/app1.db',                                           
    'USER': '',                                                       
    'PASSWORD': '',                                                      
    'HOST': '',                                                       
    'PORT': '',                                                       
},                                                          
'app2': {                                                        
    'ENGINE': 'django.db.backends.sqlite3',                                                
    'NAME': os.path.join(SITE_ROOT, 'db') + '/app2.db',                                            
    'USER': '',                                                       
    'PASSWORD': '',                                                      
    'HOST': '',                                                       
    'PORT': '',                                                       
},                                                          
}  

    DATABASE_ROUTERS = ['app1.routers.DatabaseRouter', 'app2.routers.DatabaseRouter'] 

    /app1/routers.py                                        
    class DatabaseRouter(object):                                                                                                              
     def db_for_read(self, model, **hints):                                                                                                       
     return "app1"                                                      

     def db_for_write(self, model, **hints):                                                 
     return "app1" 

/app2/routers.py                                        
class DatabaseRouter(object):                                                                                                              
    def db_for_read(self, model, **hints):                                                                                                       
     return "app2"                                                      

    def db_for_write(self, model, **hints):                                                 
     return "app2" 

回答

0

如果DB路由器保存該模型/表的所請求模型,則應返回數據庫名稱,否則應返回None。在你的情況下,你的路由器總是返回app1app2,這是不正確的。

下面是示例我如何使用它:

class AuditDBRouter(object): 
    """ 
    A router to controll audit db operations 
    """ 
    def db_for_read(self, model, **hints): 
     "Point all operations on audit models to 'audit'" 
     from django.conf import settings 
     #admin do not want separate DB? 
     if not settings.DATABASES.has_key('audit'): 
      return None 
     #return our DB name 
     if model._meta.app_label == 'audit': 
      return 'audit' 
     #we don't serve this. 
     return None 
+0

我的問題是,只有一個路由器被稱爲。只有一個。總是一樣。沒有回報的問題尚未實現。我無法切換路由器:/謝謝你。希望你能幫助我 – kate25

+0

app_label有時是「會話」或「授權」,但兩個數據庫都有用戶 – kate25

+0

連接會話不存在!我如何處理身份驗證和會話? – kate25