Django项目执行python manage.py test遇ORA-30673错误求助
解决Django测试时出现ORA-30673: column to be modified is not an identity column错误
这个错误通常是因为Django 2.x版本在为Oracle 12c创建测试数据库时,尝试将普通列修改为identity列,但目标列本身并不具备identity属性——结合你使用的Django 2.0.4、cx-Oracle 6.3和Oracle 12c环境,这属于版本间的兼容性问题,下面是几个实用的解决方法:
方法1:用--keepdb参数跳过测试数据库重建
Django默认每次运行test都会销毁并重建测试数据库,这个重建过程很容易触发列属性修改的错误。你可以尝试保留现有测试数据库,避免重复重建:
python manage.py test --keepdb
如果第一次运行测试时已经成功创建了测试库,后续用这个参数就能跳过销毁重建步骤,直接执行测试用例,大概率能绕过这个错误。
方法2:显式定义模型的自增主键字段
确保你的模型中自增字段使用AutoField(或BigAutoField)并明确指定为主键,避免Django自动生成不符合Oracle要求的列属性:
from django.db import models class YourModel(models.Model): id = models.AutoField(primary_key=True) # 其他字段定义...
显式定义主键字段能让Django更准确地生成符合Oracle 12c规范的表结构,减少测试时的结构修改操作。
方法3:升级Django到兼容Oracle 12c的更高版本
Django 2.0.x对Oracle 12c的identity列支持存在已知缺陷,后续的2.2.x LTS版本对Oracle的兼容性有明显优化。你可以尝试升级Django:
pip install django==2.2.28
注意升级后需要检查项目代码是否适配2.2版本的API变动,比如一些废弃方法需要调整。
方法4:手动创建测试数据库并完成迁移
如果上述方法都无效,可以手动处理测试数据库的初始化:
- 手动创建测试数据库(命名一般是原数据库名加
_test后缀) - 对测试库执行迁移:
python manage.py migrate --database=test
- 再运行测试命令:
python manage.py test
内容的提问来源于stack exchange,提问作者ceduard0
相关产品推荐
相关产品推荐

