2012-04-18 84 views
0

因此,我閱讀了多個數據庫文檔https://docs.djangoproject.com/en/dev/topics/db/multi-db/,這是非常有幫助的。我得到了如何在setting.py中顯示第二個數據庫以及如何通過命令提示符同步它。但我無法弄清楚的是如何指定如何使某個模型同步/保存在第二個數據庫中。特別是如果我沒有明確說明的話。多個數據庫幫助? (Django)

喜歡用戶。

如果我使用django的用戶類來創建用戶,並且我如何將它保存到第二個數據庫?

回答

1

請仔細閱讀您提供的文檔。該文檔的Automatic databse routing部分完全回答您的問題。
用戶數據庫的路由取決於您的實際使用情況和分區策略,沒有一個句子答案。用戶可以在文檔中找到示例,您可以閱讀並簽入本地計算機。

+0

我想我只有一個問題。我在哪裏放數據庫路由類?在models.py中? – city 2012-04-18 16:15:42

+0

@ user1316042它是通過'DATABASE_ROUTERS'中定義的路徑導入的,路徑只要可以找到就可以在任何地方。例如,你可以把它放在settings.py中,並將'DATABASE_ROUTERS'設置爲'''settings.MyRouter']' – okm 2012-04-18 16:36:34

+0

Hmmph。我遇到了問題,因爲用戶不能在我的模型中定義。因此我無法給它一個verbose_name,我正在使用它來路由模型。現在我將所有模型的verbose_name設置爲'cash',但是爲什麼我會嘗試使用路由器,因爲我無法/沒有定義用戶,我必須使用'if model._meta.verbose_name!='現金':'當我得到allow_syncdb時,這讓我陷入了一些問題。 – city 2012-04-18 18:04:56

1

(代碼直接從Django文檔:https://docs.djangoproject.com/en/dev/topics/db/multi-db/#automatic-database-routing

路由器處理在數據庫中的數據應該被獲取或設置

如果你想爲你的應用程序中的路由器(名爲「MYAPP」)

class MyAppRouter(object): 
     """A router to control all database operations on models in 
     the myapp application""" 

     def db_for_read(self, model, **hints): 
      "Point all operations on myapp models to 'other'" 
      if model._meta.app_label == 'myapp': 
       return 'other' 
      return None 

     def db_for_write(self, model, **hints): 
      "Point all operations on myapp models to 'other'" 
      if model._meta.app_label == 'myapp': 
       return 'other' 
      return None 

     def allow_relation(self, obj1, obj2, **hints): 
      "Allow any relation if a model in myapp is involved" 
      if obj1._meta.app_label == 'myapp' or obj2._meta.app_label == 'myapp': 
       return True 
      return None 

     def allow_syncdb(self, db, model): 
      "Make sure the myapp app only appears on the 'other' db" 
      if db == 'other': 
       return model._meta.app_label == 'myapp' 
      elif model._meta.app_label == 'myapp': 
       return False 
      return None 

通過在settings.py中添加下一行,將在其自己的數據庫(名爲「其他」)中創建/保存/處理所有'myapp'應用程序數據,其餘所有應用程序使用默認數據庫

DATABASE_ROUTERS = ['path.to.MyAppRouter'] 

路由器可以保存在任何你想要的地方。只需修復settings.DATABASE_ROUTERS的路徑即可。