2011-08-11 124 views
0

我的django項目正在使用單獨的數據庫,並且該數據庫必須使用django緩存進行緩存。所以這種方式並不是直截了當的。Django緩存單獨的數據庫

我看過djangoproject但我無法理解。鏈接顯示一個模型「CacheRouter」與一些defs。

我不知道它是否是 示例代碼或

  • 代碼已經存在的地方或
  • 的代碼,我有權改變或者
  • 代碼我要在我的模型添加。

任何人都可以精心解釋嗎?

+0

我不確定你問的是什麼問題或者你有問題......你能澄清嗎? –

+0

我手動選擇單獨的數據庫,並且該數據庫需要被緩存。 我需要寫ROUTER嗎? 如果是,在哪裏? models.py?以及settings.py將如何知道? – vsnu

回答

0

您可以執行通用路由器,該路由器使用轉到非默認數據庫的應用程序的dict進行配置。

app_to_database = { 
    'django_cache': 'the_declared_name_of_the_cache_database', 
} 

class CacheRouter(object): 

    def db_for_read(self, model, **hints): 
     return app_to_database.get(model._meta.app_label, None) 

    def db_for_write(self, model, **hints): 
     return app_to_database.get(model._meta.app_label, None) 

    def allow_syncdb(self, db, model): 
     _db = app_to_database.get(model._meta.app_label, None) 
     return db == _db if _db else None 

編輯:更好的解釋

如果你想完全用不同的模式,或數據庫服務器,甚至目前存在的後端,你需要聲明他們settings.py

DATABASES = { 
    'default': # the one storing your app data 
     { 'NAME': 'main_db', # this is the schema name 
      'USER': '...', 
      'PASSWORD': '...', 
      'ENGINE': '...', # etc... 
     }, 
    'the_declared_name_of_the_cache_database': # the name is arbitrary here 
     { 'NAME': 'db_for_djcache', # this is the schema name 
      'USER': '...', 
      'PASSWORD': '...', 
      'ENGINE': '...', # etc... 
     }, 
} 

DATABASE_ROUTERS = ['path.to.MyAppRouter'] # that is, the module.ClassName of the 
              # router class you defined above. 

如果另一方面,正如你從你的評論中似乎暗示的那樣,你只需要一個不同的表格(在同一個模式中),你完全不需要路由器,所有的東西都可以由django順利管理。

您可以檢查使用任何GUI客戶端到數據庫會發生什麼。只需打開您的模式(ta)並檢查表格及其內容。

+0

我相信我們使用一個單獨的表來緩存。那麼,我應該放入「the_declared_name_of_the_cache_database」? 然後,我是否需要在我的app.models.py中寫入這段代碼? 如果是這樣,settings.py將如何知道此代碼? – vsnu

+0

OKAY,如果我添加這個CacheRouter,我怎麼知道這個工作正常? 如何檢查? – vsnu