首页 > 解决方案 > Django 中的缓存路由器 - 如何为相关数据库正确运行 python manage.py createcachetable

问题描述

我正在为我的项目使用 Django。

我需要在数据库中生成一个新的缓存表。

该命令python manage.py createcachetable不适用于 db_my_project,而是适用于默认命令。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    },
    'db_my_project': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'my_db', 
        'USER': 'my_username',
        'PASSWORD': 'my_password',,
        'HOST': 'my_host',
        'PORT': '3306',
    },
}

我在 settings.py 中有以下缓存设置:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'dataframe_cache',
    }
}

从上面的位置信息可以看出,它应该生成一个表'dataframe_cache'。它为默认数据库(db.sqlite3)生成该表,但不是为 db_my_project(mysql)生成该表。

我知道我应该实现如下所示的缓存路由器类。

class CacheRouter:
    """A router to control all database cache operations"""

    route_app_labels = {'db_my_project'}

    def db_for_read(self, model, **hints):
        if model._meta.app_label in self.route_app_labels:
            return 'db_my_project'
        return None

    def db_for_write(self, model, **hints):
        if model._meta.app_label == 'django_cache':
            return 'db_my_project'
        return None

    def allow_migrate(self, db, app_label, model_name=None, **hints):
        if app_label in self.route_app_labels:
            return db == 'db_my_project'
        return None

我的问题是,我应该将这个 CacheRouter 类放在我的 Django 项目中的什么位置,以便我可以使用该python manage.py createcachetable命令为缓存生成一个新表?

标签: pythondjangocaching

解决方案


推荐阅读