Django模型测试报错:test_conect.projects表不存在
执行python manage.py test时触发错误:
django.db.utils.ProgrammingError: (1146, "Table 'test_conect.projects' doesn't exist")
已执行makemigrations和migrate命令,但测试数据库仅包含Django自动创建的系统表(如auth_group等),自定义表未生成。
相关信息:
- 自定义Files模型代码
- 测试代码
- 数据库配置
试过多种网上方案无效,寻求解决方案。
注:编写测试是为了尝试GitHub Actions集成,暂犹豫是否使用Docker部署MySQL与Django。
实用解决方案
1. 确认应用已注册到INSTALLED_APPS
检查settings.py里的INSTALLED_APPS列表,必须包含你的自定义应用(比如projects)——Django只会给已注册的应用生成迁移、创建测试表。
2. 强制重建测试数据库
测试命令默认会重用现有测试数据库,残留问题可能导致迁移不生效,试试强制重建:
# 直接重建测试库并执行测试 python manage.py test --noinput # 或者保留测试库但强制重新应用迁移 python manage.py test --keepdb --noinput
3. 检查迁移文件是否正常生成
确认你的应用目录下有migrations文件夹,且里面有除__init__.py外的迁移文件。如果没有,重新生成并应用迁移:
# 替换your_app_name为你的实际应用名 python manage.py makemigrations your_app_name python manage.py migrate your_app_name
4. 核对测试数据库配置
查看settings.py的DATABASES配置,确保测试库的设置正确:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'conect', 'USER': '你的数据库用户名', 'PASSWORD': '你的数据库密码', 'HOST': 'localhost', 'PORT': '3306', 'TEST': { 'NAME': 'test_conect', # 要和错误提示的库名一致 }, } }
同时确保数据库用户有创建test_conect库的权限。
5. 手动为测试库应用迁移
直接指定测试数据库执行迁移:
python manage.py migrate --database=default
如果测试库还没创建,先登录MySQL手动创建test_conect库,再执行上面的命令。
6. 排查模型代码问题
检查你的Files模型有没有语法错误、字段类型错误或关联关系错误——这些问题会导致迁移无法正常应用到测试数据库。
关于GitHub Actions与Docker的建议
如果是为了GitHub Actions集成,建议直接用Docker部署MySQL和Django。这种方式能保证测试环境与生产环境一致,避免本地和CI环境的配置差异。在GitHub Actions中可以通过docker-compose启动服务,再运行测试命令,迁移和测试环境完全隔离可控。
内容的提问来源于stack exchange,提问作者Wael

