Django缓存单独的数据库

时间:2011-08-11 06:04:08

标签: database django caching

我的django项目正在使用单独的数据库,并且必须使用django缓存来缓存该数据库。所以道路并不简单。

我在djangoproject读到,但我无法理解。该链接显示带有一些defs的模型“CacheRouter”。

我不确定是不是 示例代码或

  • 代码已存在于某处或
  • 我必须改变的代码或
  • 我必须在模型中添加的代码。

任何人都可以精心解释吗?

1 个答案:

答案 0 :(得分: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顺利管理。 / p>

您可以使用任何GUI客户端检查数据库中发生的情况。只需打开您的架构(ta)并检查表格及其内容。