Django测试抛出ORA-00942错误:表或视图不存在
Django 1.4 + Oracle 测试报错 ORA-00942/ORA-01543/ORA-01920 解决方法
问题核心
测试流程中Django尝试自动创建测试表空间和用户,但发现资源已存在;销毁后重新创建用户,执行syncdb时触发ORA-00942: table or view does not exist错误。
分步解决
1. 手动清理残留的测试资源
用Oracle管理员账号(如sysdba)执行以下命令,彻底删除重复的测试用户和表空间:
-- 删除测试用户,级联删除所有关联对象 DROP USER TEST_PRCQA CASCADE; -- 删除测试表空间,包含数据文件和内容 DROP TABLESPACE TEST_EMS12250 INCLUDING CONTENTS AND DATAFILES;
注意:执行前确认这些资源仅用于测试,不会影响生产数据。
2. 调整Django测试数据库配置
在settings.py中明确指定测试数据库的参数,避免自动创建时的命名冲突:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.oracle', 'NAME': '你的Oracle实例名', 'USER': '生产环境用户名', 'PASSWORD': '生产环境密码', # 配置测试数据库 'TEST': { 'USER': 'TEST_PRCQA', 'PASSWORD': '测试用户密码', 'TABLESPACE': 'TEST_EMS12250', 'TABLESPACE_TEMP': 'TEST_EMS12250_TEMP', # 可选,指定临时表空间 } } }
如果不想让Django自动创建用户和表空间,可以提前手动创建好测试用户并赋予权限:
-- 创建测试表空间 CREATE TABLESPACE TEST_EMS12250 DATAFILE '/path/to/test_ems12250.dbf' SIZE 100M AUTOEXTEND ON; CREATE TEMPORARY TABLESPACE TEST_EMS12250_TEMP TEMPFILE '/path/to/test_ems12250_temp.dbf' SIZE 50M AUTOEXTEND ON; -- 创建测试用户并赋权 CREATE USER TEST_PRCQA IDENTIFIED BY 你的密码 DEFAULT TABLESPACE TEST_EMS12250 TEMPORARY TABLESPACE TEST_EMS12250_TEMP; GRANT CONNECT, RESOURCE, CREATE VIEW TO TEST_PRCQA;
3. 修复ORA-00942错误
这个错误通常是因为syncdb执行时,Django尝试访问未创建的表,或者测试用户权限不足:
- 确保所有app的模型都已正确定义,没有引用不存在的表;
- 手动执行
syncdb测试:先切换到测试用户,运行python manage.py syncdb --settings=你的settings,看是否能正常创建表; - 如果是第三方app的问题,检查该app是否兼容Django1.4和Oracle。
4. 重新运行测试
清理完资源并调整配置后,直接运行测试命令:
python manage.py test
内容的提问来源于stack exchange,提问作者Casey
相关产品推荐
相关产品推荐

