Linux—Docker镜像使用cx_Oracle连接Oracle数据库
前置条件
包含python环境的Docker镜像,如python3.7
安装Oracle客户端
文件下载
首先Oracle官网下载安装包:
- instantclient-basic-linux.x64-11.2.0.4.0
- instantclient-sqlplus-linux.x64-11.2.0.4.0
文件配置
文件下载后放至镜像中 /usr/local/oracle 目录下
# 解压文件
mkdir /usr/local/oracle
unzip /usr/local/oracle/instantclient-basic-linux.x64-11.2.0.4.0.zip
unzip /usr/local/oracle/instantclient-sqlplus-linux.x64-11.2.0.4.0.zip
# 环境变量配置
cd /usr/local/oracle/instantclient_11_2
mkdir -p network/admin
cd network/admin
vi .bash_profile
# 写入
export ORACLE_HOME=/usr/local/oracle/instantclient_11_2
export TNS_ADMIN=$ORACLE_HOME/network/admin
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH
export PATH=$ORACLE_HOME:$PATH
export DPI_DEBUG_LEVEL=64
# 执行环境变量
source .bash_profile
注:docker镜像启动后, 需执行上述命令,否则将报以下错误。
报错
解决报错问题:
cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: “libclntsh.so: cannot open shared object file: No such file or directory”.
yum install libaio1
yum install libaio
yum install libnsl
以上三个,能安装就安装,目前在centos8上,第一个无法安装,安装后两个也解决问题了。
安装cx_Oracle
pip install cx_Oracle -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/
测试
import cx_Oracle as Ora
user_name = "username"
passwd = "passwd"
ip_port = "xxx.xxx.xxx.xxx:xxxx" # ip地址与端口号
conn = Ora.connect(user_name, passwd, '{}/dbdw'.format(ip_port), encoding='UTF-8')
cur = conn.cursor()
temp_resu = cur.execute(str1)
resu = temp_resu.fetchall()
conn.close()
print(rese) # 返回数据即表示成功
参考博客: