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

Django测试数据库初始化异常:表/字段缺失及读写问题求助

解决Django测试数据库初始化异常的方案
  • 排查迁移文件完整性
    先确认所有模型都有对应的迁移文件:

    1. 执行python manage.py makemigrations --check,查看是否有未生成迁移的模型。
    2. 如果有遗漏,运行python manage.py makemigrations生成对应迁移,确保INSTALLED_APPS里的所有app(包括第三方依赖)都已正确加载迁移。
  • 清理旧测试库,完全重建

    1. 手动删除PostgreSQL中的测试库(默认名为test_myscore):
      DROP DATABASE test_myscore;
      
    2. 不带--keepdb参数重新运行测试,让Django从头创建测试库:
      python manage.py test
      

    (--keepdb会复用旧库,容易残留旧结构或迁移状态,导致初始化不完整)

  • 调整测试数据库配置
    恢复默认的测试配置,移除可能干扰初始化的参数:

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': 'myscore',
            'USER': env('DEFAULT_DATABASE_USER'),
            'PASSWORD': env('DEFAULT_DATABASE_PASSWORD'),
            'HOST': 'localhost',
            'PORT': '',
            'TEST': {
                # 移除SERIALIZE=False,使用默认序列化逻辑
                # 移除MIGRATE配置,默认True会通过迁移创建完整表结构
            }
        },
    }
    

    解释:SERIALIZE=False会跳过测试数据序列化,可能导致迁移执行不全;MIGRATE=False会直接从模型建表,和真实库的迁移历史不一致,容易缺失字段。

  • 查看迁移执行日志定位问题
    运行测试时加-v 2参数,查看详细迁移日志:

    python manage.py test -v 2
    

    从日志里检查哪些迁移未执行,或执行时是否有报错,比如依赖缺失导致的迁移中断。

  • 解决--keepdb模式下的读写权限问题
    如果必须复用测试库,确保数据库用户对测试库有完整权限:

    GRANT ALL PRIVILEGES ON DATABASE test_myscore TO your_db_user;
    GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO your_db_user;
    GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO your_db_user;
    

    同时检查测试代码中是否有硬编码的数据库连接,或错误的数据库路由导致读写指向真实库。

内容的提问来源于stack exchange,提问作者Matt S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 21:12:23