问题描述
我正在尝试使用 cx_Oracle 库使用 python 访问 lambda 中的 oracle db。由于oracle需要os特定的客户端来连接,所以我也下载了instant client,在AWS中加了一层。问题是我看到了这个不会让步的错误
DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: "libclntsh.so: cannot open shared object file: No such file or directory"
lambda_handler.py
import cx_Oracle
import os
def lambda_handler(event,context):
dsn = cx_Oracle.makedsn('url',1521)
con = cx_Oracle.connect(user='user',password='1234',dsn=dsn)
cursor = con.cursor()
cursor.execute('SELECT * FROM DEVICES')
return {
'statusCode': 200,'body': cursor.fetchall()
}
我看到其他线程添加了 init_oracle_client,所以我添加了cx_Oracle.init_oracle_client(lib_dir='/opt/instantclient_21_1')
由于 Lambda 层放置在“/opt”目录下,它似乎找到了该文件,但它产生了类似的错误。注意文件不同
DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: "libnnz21.so: cannot open shared object file: No such file or directory"
根据我的理解,由于我专门放置了 lib_dir,因此该文件应该是“/opt/instantclient_21_1/libnnz21.so”,它在那里,但出于某种原因,Oracle 尝试在当前运行时目录中找到该库。
注意我正在使用:
- Python 3.8
- 适用于 Linux x86-64 的 Instant Client Lite
- cx_Oracle-8.1.0-cp39-cp39-manylinux1_x86_64
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)