python - Django 错误:“settings.DATABASES 配置不正确。请提供 ENGINE 值。”
问题描述
我正在尝试按照此处的指南在 Django 2.2 中使用多个数据库,默认数据库留空。在我的 settings.py 文件中,我有
# Set database routers
DATABASE_ROUTERS = [r'myapp.db_routers.AuthRouter', r'myapp.db_routers.RemoteRouter']
# Database configuration - leave default blank
DATABASES = {
'default': {},
'auth_db': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
},
'remote': {
'ENGINE': 'sql_server.pyodbc',
'HOST': 'MY HOST NAME',
'NAME': 'MY DB NAME',
'PORT': 'MY PORT NAME',
'USER': get_secret(Secrets.REMOTE_DB_USERNAME),
'PASSWORD': get_secret(Secrets.REMOTE_DB_PASSWORD),
'OPTIONS': {
'driver': 'ODBC Driver 17 for SQL Server',
'host_is_server': True
}
}
}
我的 db_routers.py 文件然后包含两个数据库路由器,如文档中所建议的(但它应该捕获所有 django 内置应用程序):
class AuthRouter:
route_app_labels = {"admin", "sessions", "messages", "staticfiles", "auth", "contenttypes"}
def db_for_read(self,
model: Model,
**hints) -> Optional[str]:
if model._meta.app_label in self.route_app_labels:
return "auth_db"
else:
return None
def db_for_write(self,
model: Model,
**hints) -> Optional[str]:
if model._meta.app_label in self.route_app_labels:
return "auth_db"
else:
return None
def allow_relation(self,
model_1: Model,
model_2: Model,
**hints) -> Optional[bool]:
if (model_1._meta.app_label in self.route_app_labels or
model_2._meta.app_label in self.route_app_labels):
return True
else:
return None
def allow_migrate(self,
db: str,
app_label: str,
model_name: Optional[str] = None,
**hints) -> Optional[bool]:
if app_label in self.route_app_labels:
return db == "auth_db"
else:
return None
class RemoteRouter:
remote_db = "remote"
def db_for_read(self,
model: Model,
**hints) -> Optional[str]:
# raise ValueError("read")
return self.remote_db
def db_for_write(self,
model: Model,
**hints) -> Optional[str]:
# raise ValueError("write")
return self.remote_db
def allow_relation(self,
model_1: Model,
model_2: Model,
**hints) -> Optional[bool]:
# raise ValueError("allow relations")
if (model_1._state.db == self.remote_db or
model_2._state.db == self.remote_db):
return True
else:
return None
def allow_migrate(self,
db: str,
app_label: str,
model_name: Optional[str] = None,
**hints) -> Optional[bool]:
# print(f"allow migrate: {db}, {app_label}, {model_name}")
return True
但是,当我运行 showmigrations 时,我收到错误“settings.DATABASES 配置不正确。请提供 ENGINE 值。”。根据文档,我尝试在我的第一个数据库路由器中仅使用“auth”和“contenttypes”,但这没有帮助。我还在这里查看了具有相同错误的其他问题,但我找不到与数据库路由器有相同问题的任何问题。
解决方案
推荐阅读
- javascript - 设置了“overrideMimeType”时,“XMLHttpRequest”响应文本编码是什么?
- python - Python:[...] 在列表末尾
- python - 如何更改 txt 文件 Python 中特定列中的行的值?
- visual-studio-code - 没有安装“cpp”文件的选择格式化程序
- python - 在 pyinstaller 生成的 exe 上找不到任何有价值的 Window 提供程序
- angularjs - AngularJS将带有参数的函数传递给事件指令
- z-index - 固定容器中绝对容器上的 Z-index
- filtering - 卡尔曼滤波器:测量噪声协方差矩阵和过程噪声如何帮助卡尔曼滤波器的工作,有人可以直观地解释一下吗?
- python - Cython 错误 ImportError:@rpath/libc++abi.1.dylib 库未在 conda Python 环境中加载
- php - 在 Codeigniter 查询中正确使用撇号和引号