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

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:手动创建测试数据库并完成迁移

如果上述方法都无效,可以手动处理测试数据库的初始化:

  1. 手动创建测试数据库(命名一般是原数据库名加_test后缀)
  2. 对测试库执行迁移:
python manage.py migrate --database=test
  1. 再运行测试命令:
python manage.py test

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:22:42