- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
一些上下文
用于从 Python 访问 Oracle 数据库的包 cx_Oracle
需要在加载和使用包之前设置环境变量。在 Windows 上,需要将文件夹 instantclient_12_2
添加到 PATH,而在 Linux 上,需要设置环境变量 LD_LIBRARY_PATH
,指向 instantclient_12_2
文件夹,您可以在 shell 中运行以下命令(在运行 python 脚本之前):
export LD_LIBRARY_PATH= path/to/instantclient_12_2/folder:$LD_LIBRARY_PATH
问题
在 Windows 上,如果您从 python 脚本将 instantclient_12_2
文件夹添加到 PATH,一切都会按预期工作,您不必强制用户手动更改 PATH:
# On Windows, it works like a charm
import os
os.environ['PATH'] += ';' + 'Z:\\path\\to\\instantclient_12_2\\folder'
import cx_Oracle
tns = cx_Oracle.makedsn("server", "port", "DSN")
connection = cx_Oracle.connect("user", "password", tns)
cursor = connection.cursor()
cursor.execute("select * from ...")
不幸的是,这同样不适用于 Linux(我在 Oracle Linux Server 7.3 版 上运行,即 CentOS)。等效脚本(即从 python 脚本设置 LD_LIBRARY_PATH 变量而不是添加到 PATH)不起作用:
# On Linux, the following code does not work
import os
os.environ['LD_LIBRARY_PATH'] = '/path/to/instantclient_12_2/folder'
import cx_Oracle
tns = cx_Oracle.makedsn("server", "port", "DSN")
connection = cx_Oracle.connect("user", "password", tns)
cursor = connection.cursor()
cursor.execute("select * from ...")
是否可以在 Linux 上以这样的方式设置环境变量 LD_LIBRARY_PATH
cx_Oracle
将能够使用其值来加载和正常工作?如果可能,您如何实现这一目标?
相关问题
SOF 处理如何从 Python 设置环境变量有无数的问题,但据我所知,没有一个专门处理加载 cx_Oracle
的问题而不需要弄乱环境变量手动。
一些答案肯定“无法从子进程更改环境变量”。但在这种情况下,cx_Oracle
执行的任何代码都在主 python 脚本(即父进程,而不是子进程)创建的上下文中执行,然后大概是 cx_Oracle
应该能够访问在此上下文中创建的环境变量(Windows 中实际发生的情况)。
最佳答案
不,您不能在进程内设置 LD_LIBRARY_PATH。此变量由启动 代码检查,因此一旦应用程序启动,它就会被完全忽略!请注意,这与 Windows 不同。唯一可能的方法是在设置环境变量后重新执行该进程(或执行一个运行您的真实代码的新进程)——但在大多数情况下这不太可能是一个可接受的答案!
通常,环境变量 LD_LIBRARY_PATH 在您的登录脚本中设置,或者通过将文件添加到/etc/ld.so.conf.d 并运行 ldconfig 来有效地全局设置。如果这些都 Not Acceptable ,您还可以创建一个简单的 shell 脚本来设置环境变量,然后执行您的 Python 脚本。
希望这能回答您的问题!
关于python - 在 Linux 上调用 cx_Oracle 之前设置正确的环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46550598/
我为此苦了一个星期。我正在尝试运行一个使用即时客户端版本11.2.0.3.0与远程Oracle数据库连接的python flask应用程序。 在遇到许多问题之后,我结束了使用3个buildpack,其
以下语句中字典中的 bindind 日期有问题吗?? mySQL = 'SELECT day_key FROM timeday WHERE calendar_date =:calendar' args
我尝试在 Ubuntu 上使用 crontab 运行 python scrapy 爬虫,但收到以下错误消息: Traceback (most recent call last): File "/u
我正在使用 Amazon Work Space,并且我使用 VPN 通过 SSH Ubuntu 16.04 实例进行连接。我使用 python 来连接 Oracle 数据库 11g,我需要使用 cx_
在我的 Python 代码中,当我要求用户输入一个字符串以进行 SELECT 时,它起作用了,但是当我尝试使用相同输入的 UPDATE 时,不允许我执行 这是连接成功后的代码 curs = conne
在我的 Python 代码中,当我要求用户输入一个字符串以进行 SELECT 时,它起作用了,但是当我尝试使用相同输入的 UPDATE 时,不允许我执行 这是连接成功后的代码 curs = conne
我正在尝试使用 python 中的 cx_Oracle 连接到 oracle 数据库。我能够连接到数据库并提取数据。 现在我正在尝试连接到另一个数据库,我必须首先调用安全过程,然后只有我才能看到基础表
对于我创建的 Oracle 表 MYTABLE,我有一个列 COL1,它被声明为 NUMBER(20,3);小数点后可以有 3 位有效数字。当我在此表上运行 cx_Oracle 游标时: cursor
我正在使用 web.py 从 Oracle 创建一个简单的报告页面。当我采用使用 vars= 传递参数的最佳实践方法时,延迟为 11-12 秒。当我使用字符串替换执行相同的查询时,查询会在不到一秒的时
我正在尝试在 python 中使用 cx_Oracle 并行运行完全独立的 Oracle 查询。 我可以通过为每个线程设置一个新的数据库连接,然后在每个单独的线程中运行查询来成功地完成这项工作,这使总
为什么下面的代码不起作用?它返回零行,即使我有很多匹配搜索条件的行。 select * from Table_1 形式的简单查询工作正常并返回正数行 import cx_Oracle def func
在最新版本的 python 中,可以使用类似 with open('abc.txt') as f: 的东西来保证文件被关闭,即使在以下(缩进)中发生异常) 代码块。我想知道这种技术是否也适用于 cx_
我正在使用 cx_oracle python 库来查找过去 90 分钟内具有 ModifiedDate 的任何记录。 import cx_Oracle import datetime from dat
我正在尝试连接到 Oracle 数据库,但出现以下错误: curcon = cx_Oracle.connect(conn_str) cx_Oracle.DatabaseError: ORA-12170
我正在运行... SQL*Plus: Release 9.2.X.X.X - Production on Wed Jun 22 13:02:14 2011 Copyright (c) 1982, 20
Code Oracle: Procedure example ( p_Cod_Rspta out varchar2 , p_e
在 Java DataSource 中实现了一个用于数据库访问的 Java 范例。该对象围绕数据库连接的创建创建了一个有用的抽象。 DataSource 对象保留数据库配置,但只会根据请求创建数据库连
我正在使用 cx_Oracle 访问我们的数据库。我希望用户能够输入电台 ID,例如: stationID=(无论用户在提示时输入什么) cursor.execute('''select cruise
为了演示 Oracle 的安全特性,必须在用户 session 尚未建立时调用 OCIServerVersion() 或 OCIServerRelease()。 同时具有数据库参数 sec_retur
我正尝试在 Oracle 10 数据库中再次执行此操作: cursor = connection.cursor() lOutput = cursor.var(cx_Oracle.STRING) cur
我是一名优秀的程序员,十分优秀!