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

Django+oracledb遇版本错误:Oracle12.2遭拒但文档称12.1+兼容

问题排查:Oracle 12.2.0.1.0 版本在Django迁移时提示需要19+版本

我参考oracledb文档,文档说明12.1以上版本均可正常使用,但执行Django创建迁移操作时报错,当前数据库版本为12.2.0.1.0,错误信息如下:

django.db.utils.NotSupportedError: Oracle 19 or later is required (found 12.2.0.1.0).

我的settings.py配置如下:

from pathlib import Path
import sys
import oracledb
oracledb.version = "8.3.0"
sys.modules["cx_Oracle"] = oracledb
#the above line was added because of error (django.core.exceptions.ImproperlyConfigured: Error 
#loading cx_Oracle module: No module named 'cx_Oracle')

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.oracle',
        'NAME': (
                    '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=server123)(PORT=1521))'
                    '(CONNECT_DATA=(SERVICE_NAME=server.domain.com)))'
                ),
        'USER': 'user123',
        'PASSWORD': 'password',
        'OPTIONS': {
            'threaded': True,
            
        },
    }
}

可能的原因及解决办法

  • Django版本兼容性限制
    Django的django.db.backends.oracle后端对Oracle版本的要求可能独立于oracledb。比如Django 4.2及以上版本,Oracle后端最低要求为19c。先检查当前Django版本:

    python -m django --version
    

    若为高版本Django,要么升级Oracle到19c及以上,要么降级Django到支持12.2的版本(如Django 4.1及以下)。

  • oracledb模拟cx_Oracle的配置问题
    手动设置oracledb.version = "8.3.0"并替换sys.modules["cx_Oracle"],可能导致Django的Oracle后端误判驱动版本,触发更高的数据库版本要求。尝试移除这两行配置,确认oracledb是否能被Django正确识别;若仍提示找不到cx_Oracle,确保安装的oracledb版本兼容,改用官方推荐的兼容方式,而非手动替换模块。

  • 数据库版本检测异常
    直接用oracledb连接数据库,验证实际返回的版本是否正确:

    import oracledb
    conn = oracledb.connect(user="user123", password="password", dsn="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=server123)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=server.domain.com)))")
    print(conn.version)
    

    若返回版本确实为12.2.0.1.0,说明Django的版本检测逻辑存在问题,此时优先考虑降级Django版本,而非修改后端源码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 11:50:23