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

使用Django inspectdb遇ORA-00904错误,Oracle 11适配问题求助

问题原因与适配说明及解决方案

错误原因

ORA-00904: "USER_TABLES"."DEFAULT_COLLATION": invalid identifier 错误的核心是:DEFAULT_COLLATION是Oracle 12c及以上版本才新增的表属性字段,你使用的Oracle 11.5.10.2(对应Oracle 11gR2)并不包含这个字段。

执行python manage.py inspectdb时,Django的Oracle数据库后端会查询USER_TABLES视图获取表元数据,若你用的是Django 4.0及以上版本,其Oracle适配代码会默认读取DEFAULT_COLLATION字段,Oracle 11g无该字段,因此触发报错。

Django对Oracle 11g的适配变更

Django从4.0版本开始,官方不再支持Oracle 11g,仅兼容Oracle 12.1及以上版本。后续版本的Django Oracle后端代码会依赖12c+的新特性(比如DEFAULT_COLLATION字段),导致连接Oracle 11g时,inspectdb这类读取元数据的命令失效。

你之前能通过oracledb连接数据库,是因为oracledb本身兼容Oracle 11g,但Django框架层面的元数据查询逻辑已不再适配旧版本Oracle。

解决方案

  • 降级Django版本:推荐使用Django 3.2.x(长期支持LTS版本),该版本官方明确支持Oracle 11.2及以上,其Oracle后端不会查询DEFAULT_COLLATION字段,可正常执行inspectdb命令。
  • 手动编写模型类:如果不想降级Django,可直接根据ap.ap_invoices_all表的结构,手动编写Django模型类,仅保留GET请求所需字段即可,无需依赖inspectdb工具。

内容的提问来源于stack exchange,提问作者Дмитрий Крашенинников

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 17:42:36