使用 Python 38

问题描述

我正在尝试使用 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...