Django多数据库路由使用方法及默认应用数据库隔离配置后migrate无迁移问题排查
Django多数据库路由迁移问题排查与解决
让我来帮你拆解这个问题——你执行migrate后显示无迁移可应用,核心是两个关键配置/操作错误导致的:
1. 数据库路由配置项拼写错误
你在settings.py里写的是:
DATABASE_ROUTES = ['core.dbrouter.AuthRoute', 'core.dbrouter.GisRoute']
但Django官方规定的配置项名称是**DATABASE_ROUTERS**(注意是复数形式的ROUTERS,不是ROUTES)。这个拼写错误直接导致Django完全没有加载你定义的路由类,你的数据库隔离规则根本没生效!
修正后的配置应该是:
DATABASE_ROUTERS = ['core.dbrouter.AuthRoute', 'core.dbrouter.GisRoute']
2. 迁移命令未指定目标数据库
即使路由配置正确,默认情况下python manage.py migrate只会对default数据库执行迁移操作。而你需要把admin、auth这些系统应用迁移到default_django数据库,所以必须明确指定数据库参数:
# 迁移系统应用到default_django数据库 python3 manage.py migrate --database=default_django
如果你的业务模型需要迁移到default(PostGIS)数据库,再单独执行:
# 迁移业务应用到default数据库 python3 manage.py migrate --database=default
额外验证点
- 确认
core.dbrouter模块在Django的Python路径中(比如core是INSTALLED_APPS里的应用),确保Django能正确导入你的路由类 - 检查
AuthRouter的allow_migrate方法逻辑,当前的写法是正确的,但如果有多个路由类,要注意它们的执行顺序(Django会按DATABASE_ROUTERS里的顺序依次调用路由方法)
内容的提问来源于stack exchange,提问作者Bakhodir Ramazonov
相关产品推荐
相关产品推荐

