我的oracle数据库[OracleSlim]在Docker容器中启动并运行,我在容器内创建了一个用户表。它在 0.0.0.0:1521 上运行。我需要“安装了Oracle Instant Client”才能使cx_oracle工作吗?
我在容器内尝试了这个'sqlplus administrator / Welcome121 @ ORCLCDB'连接字符串。它正在工作。
from sqlalchemy import create_engine
import cx_Oracle
engine=create_engine('oracle://username:password@hostname:port/sid')
错误:
cx_Oracle.DatabaseError:DPI-1047:64位Oracle客户端库无法 被加载:“ libclntsh.so:无法打开共享的对象文件:没有这样的文件 或目录”。请参阅 https://oracle.github.io/odpi/doc/installation.html#linux寻求帮助
我的flask-Sqlalchemy的Engine对象中的oracle成功连接。 欢迎使用新的ORM或用于连接oracle的软件包。 注意: 我还没有在本地安装oracle Instant Client 但已将其安装在我的容器中。
已更新
现在我在Docker容器上运行了Oracle,我将在本地将来自Python cx_Oracle的那些连接起来。使用下面的方法,
import cx_Oracle
constr = 'system/oracle@//172.17.0.2:1521/orcl.localdomain'
conn = cx_Oracle.connect(constr)
是否可以借助python cx_Oracle或Flask-SQLAlchemy与运行在localhost:1521上的容器连接?
答案 0 :(得分:0)
您确实需要oracle客户端库:
这来自cx_Oracle文档:
要将cx_Oracle 7与Python和Oracle数据库一起使用,您需要: Python 2.7或3.5及更高版本。较旧的cx_Oracle版本可能与较旧的Python版本一起使用。 Oracle客户端库。这些可以来自免费的Oracle Instant Client,或者如果Python与数据库在同一台计算机上,则可以从Oracle数据库中获得。 Linux,Windows和macOS支持Oracle客户端库版本18、12和11.2。用户还报告了其他平台的成功。 Oracle数据库。 Oracle的标准客户端-服务器版本互操作性允许cx_Oracle连接到旧数据库和新数据库。
答案 1 :(得分:0)
如果sqlplus administrator/Welcome121@ORCLCDB'
在工作,则您必须已经有Oracle Client库可用,因为sqlplus和cx_Oracle都需要相同的Oracle库集。验证sqlplus可以真正查询您的数据库。
检查SQL * Plus版本是否为11.2或更高版本。然后找出sqlplus和python的配置之间的区别。配置与sqlplus相同的cx_Oracle所需的环境变量。如果已安装完整的Oracle Client或Oracle DB,则可以在使用source /usr/local/bin/oraenv
运行python之前设置环境。如果您使用旧的Oracle XE 11.2,则命令为source /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh
如果您没有Oracle Client库,请在https://cx-oracle.readthedocs.io/en/latest/installation.html#installing-cx-oracle-on-linux之后安装它们,我建议使用ldconfig
来设置库搜索路径。