




















Python 3.11.6 + Oracle 11g 的环境
|
特性 |
python-oracledb (Thick) |
cx_Oracle |
|---|---|---|
|
Python 3.11 支持 |
✅ 完美 |
✅ 良好 |
|
维护状态 |
🔥 官方积极维护 |
🚧 仅维护 |
|
异步支持 |
✅ 原生 async/await |
❌ 不支持 |
|
Oracle 11g 兼容性 |
✅ 需 Instant Client |
✅ 需 Instant Client |
|
推荐指数 |
⭐⭐⭐⭐⭐ |
⭐⭐⭐ |
最终建议:直接使用 python-oracledb + Instant Client 19c,这是目前 Python 3.11.6 连接 Oracle 11g 最稳妥、面向未来的方案。
针对 Python 3.11.6 + Oracle 11g 的环境,配置 Oracle Instant Client是连接成功的关键。由于 Oracle 11g 协议较老,必须使用 Thick Mode(厚模式),且推荐使用 Instant Client 19c 版本进行向下兼容。
Windows 、 Linux 、Docker的详细配置指南。
将下载instantclient_19_30的 ZIP 包解压到无中文、无空格的路径下,例如:C:\oracle\instantclient_19_30
下载地址:https://www.oracle.com/database/technologies/instant-client/downloads.html右键“此电脑” → 属性 → 高级系统设置 → 环境变量。系统变量中找到 Path,点击编辑。新建并添加你的 Instant Client 路径:C:\oracle\instantclient_19_30。点击确定保存。
python3中:
import oracledb import datetime # 启用 thick 模式以支持旧版本 Oracle 数据库 try: oracledb.init_oracle_client() print("已启用 thick 模式") except Exception as e: print(f"启用 thick 模式失败: {e}") print("将尝试使用 thin 模式")
测试连接成功。
Linux 配置指南(CentOS/Ubuntu)
下载地址: https://www.oracle.com/cn/database/technologies/instant-client/linux-x86-64-downloads.html 我这里下载 instantclient_19_30
解压与目录结构
# 1. 创建目录并解压 sudo mkdir -p /opt/oracle sudo unzip instantclient-basic-linux.x64-19.21.0.0.0dbru.zip -d /opt/oracle/ sudo unzip instantclient-sqlplus-linux.x64-19.21.0.0.0dbru.zip -d /opt/oracle/ # 2. 创建软链接(关键步骤,解决版本号问题) cd /opt/oracle/instantclient_19_21 sudo ln -s libclntsh.so.19.1 libclntsh.so
配置动态链接库路径
# 1. 编辑配置文件 sudo vim /etc/ld.so.conf.d/oracle.conf # 2. 写入以下内容 /opt/oracle/instantclient_19_21 # 3. 刷新配置 sudo ldconfig
Docker 环境特殊配置
在 Dockerfile 中,除了复制 Instant Client,还需安装 libaio:
基础镜像用 python:3.11-slim,此镜像的操作系统为Debian GNU/Linux 13 (trixie)
FROM python:3.11-slim
# 设置工作目录
WORKDIR /app
# 安装系统依赖并创建符号链接
RUN apt-get update && \
apt-get install -y libaio1t64 && \
# 创建 libaio.so.1 符号链接
ln -s /usr/lib/x86_64-linux-gnu/libaio.so.1t64 /usr/lib/x86_64-linux-gnu/libaio.so.1 && \
rm -rf /var/lib/apt/lists/*
# 创建目录并复制 Instant Client
RUN mkdir -p /opt/oracle
COPY instantclient_19_30 /opt/oracle/instantclient_19_30
# 设置环境变量(修正语法)
ENV ORACLE_HOME=/opt/oracle/instantclient_19_30 \
LD_LIBRARY_PATH=/opt/oracle/instantclient_19_30 \
PATH=/opt/oracle/instantclient_19_30:$PATH
# 创建必要的符号链接和库文件
RUN cd $ORACLE_HOME && \
# 创建基本的符号链接
ln -sf libclntsh.so.19.1 libclntsh.so && \
ln -sf libocci.so.19.1 libocci.so && \
# 创建库缓存(如果需要)
ldconfig || true
# 调试:显示环境变量(只在构建时运行)
RUN echo "=== 环境变量设置 ===" && \
echo "ORACLE_HOME: $ORACLE_HOME" && \
echo "LD_LIBRARY_PATH: $LD_LIBRARY_PATH" && \
echo "PATH: $PATH" && \
echo "=== 库文件检查 ===" && \
ls -la $ORACLE_HOME/*.so* 2>/dev/null || echo "未找到 .so 文件"
# 复制依赖文件
COPY requirements.txt .
# 安装依赖,使用阿里云镜像源
RUN pip3 install --no-cache-dir -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
# 复制应用代码
COPY . .
# 环境变量
ENV PYTHONUNBUFFERED=1
# 健康检查
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD python -c "import oracledb; print('Oracle client available')" || exit 1
# 运行应用
CMD ["python", "app.py"]
测试连接数据库正常。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。