python - 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
命令为缓存生成一个新表?
解决方案
推荐阅读
- c# - DllExportAppDomainIsolatedTask 在构建 DLL 时意外失败
- java - 如何将此响应转换为模型
- algorithm - 找到不同的子集?
- c# - 我可以将 Pomelo.EntityFrameworkCore.MySql 与 .NET Framework 4.x 一起使用吗?
- c# - 如何在单元测试项目中获取启动项目的路径?
- javascript - 在angularjs切换操作中单击按钮时选择和取消选择div
- yii - 在动作 Yii 1.1 之前将参数传递给调用的动作
- javascript - WebRTC 视频不出现
- django - 为 django api 设置消费者驱动的合同测试并响应客户端的合适方法是什么?
- javascript - disable_with 使用渲染 js 时无法按预期工作:控制器中的“window.location=some_path”