You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django单元测试:如何为多数据库分别执行迁移?

Django多数据库测试时指定应用迁移到对应数据库的解决方案

要解决跨数据库重复迁移引发的"对象已存在"错误,核心是通过数据库路由控制每个应用的迁移仅在对应的数据库执行,具体步骤如下:

  • 创建数据库路由文件
    在项目根目录下新建database_router.py,写入以下代码:

    class AppDatabaseRouter:
        def db_for_read(self, model, **hints):
            if model._meta.app_label == 'app_a':
                return 'default'
            elif model._meta.app_label == 'app_b':
                return 'other_db'
            return None
    
        def db_for_write(self, model, **hints):
            if model._meta.app_label == 'app_a':
                return 'default'
            elif model._meta.app_label == 'app_b':
                return 'other_db'
            return None
    
        def allow_migrate(self, db, app_label, model_name=None, **hints):
            # 关键逻辑:限制应用只能在指定数据库执行迁移
            if app_label == 'app_a':
                return db == 'default'
            elif app_label == 'app_b':
                return db == 'other_db'
            return None
    
  • 在settings.py中配置路由
    修改项目的settings.py,添加路由配置(替换你的项目名称为实际项目目录名):

    DATABASE_ROUTERS = ['你的项目名称.database_router.AppDatabaseRouter']
    
  • 运行测试
    配置完成后直接执行测试命令即可:

    python manage.py test
    

    若存在残留测试数据库导致异常,可先清理再运行:

    python manage.py test --noinput
    

该方案通过路由的allow_migrate方法,严格绑定应用与对应数据库的迁移关系,从根源上避免了跨数据库重复迁移的问题。

内容的提问来源于stack exchange,提问作者James Lin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 18:24:59