首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用来自Linux服务器的python连接到Oracle数据库(lxv)

使用来自Linux服务器的python连接到Oracle数据库(lxv)
EN

Stack Overflow用户
提问于 2022-01-14 15:40:09
回答 2查看 866关注 0票数 0

在我的本地机器

我在python中创建了一个脚本,从Oracle数据库中检索数据。到DB的连接使用cx_Oracle完成。

代码语言:javascript
运行
复制
con = cx_Oracle.connect (username, password, dbService)

使用SQL时,使用自定义JDBC建立连接。

在Linux服务器上复制过程.

  • 我已经创建了一个安装了installed的python虚拟环境。
  • 我在服务器上安装了OracleClient19.3.0,文件夹instantclient已经就位。

当我试图执行python脚本时,我得到了以下错误。

cx_Oracle.DatabaseError: DPI-1047:无法找到64位Oracle客户端库: DPI-1047:无法找到64位Oracle客户端库:"libclntsh.so:无法打开共享对象文件:没有此类文件或目录“。有关帮助,请参见指南/installation.html

我认为问题是Oracle路径,这不是python所期望的问题。因此,我添加了这行额外的代码-指向Oracle库所在的路径。

代码语言:javascript
运行
复制
cx_Oracle.init_oracle_client(lib_dir=r"/apps/oracle/product/19.3.0/lib")

这将导致另一个错误:

cx_Oracle.DatabaseError:尝试检索错误或01804的文本时出错

有什么线索吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-17 16:08:22

我的问题的答案是由ORA-1804消息指出的.

根据Oracle初始化文档:guide/initialization.html#usinginitoracleclient

注意:如果在Linux和相关平台上设置了lib_dir,那么在启动Python之前,还必须将系统库搜索路径配置为包含该目录。 在任何操作系统上,如果将lib_dir设置为完整数据库的库目录或完全客户端安装,则需要预先设置ORACLE_HOME环境,例如通过设置ORACLE_HOME环境变量。否则,您将得到类似ORA-1804之类的错误。在启动Python之前,应该设置此变量和其他Oracle环境变量,如Oracle所示

尽管定义ORACLE_HOME应该在启动Python之前完成(根据ORACLE_HOME),但也可以通过修改python脚本本身来完成。因此,在oracle客户端初始化命令之前,必须添加以下命令:

代码语言:javascript
运行
复制
import os
# Setup Oracle paths 
os.environ["ORACLE_HOME"] = '/apps/oracle/product/19.3.0'
os.environ["ORACLE_BASE"] = '/apps/oracle'
os.environ["ORACLE_SID"] = 'orcl'
os.environ["LD_LIBRARY_PATH"] = '/apps/oracle/product/19.3.0/lib'

import cx_Oracle
# Initialize Oracle client
cx_Oracle.init_oracle_client(lib_dir=r"/apps/oracle/product/19.3.0/lib")
票数 0
EN

Stack Overflow用户

发布于 2022-01-14 22:32:18

Oracle初始化文档指出,在Linux上,init_oracle_client()并没有真正做您认为它所做的事情。在Python进程开始之前,仍然必须设置系统库搜索路径以包含Oracle库。

我是否正确地理解带有Python的机器同时安装了DB和即时客户端?

如果您确实希望Python使用即时客户端库,那么将LD_LIBRARY_PATH设置为它的位置,而不设置ORACLE_HOME。

如果使用Python在机器上安装了完整的Oracle DB,那么可以删除Instant客户端。在启动Python之前,您需要设置ORACLE_HOME、LD_LIBRARY_PATH和其他需要的东西--通常运行source /usr/local/bin/oraenv。这应该将系统库搜索路径设置为包含/apps/oracle/product/19.3.0/lib。像这样的代码片段(未经测试)可能会有所帮助:export ORACLE_SID=ORCLCDB;set ORAENV_ASK=NO; source /usr/local/bin/oraenv。确保process能够读取对ORACLE_HOME目录的访问。

Oracle安装指南讨论了所有这些。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70713075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档