如何通过aws lambda python连接oracle数据库?

aelbi1ox  于 2023-04-29  发布在  Oracle
关注(0)|答案(3)|浏览(229)

我有一个要求,我需要连接到oracle数据库,并从db表中获取一些数据。因此,由于我是AWS lambda的初学者,所以我从下面的例子开始。

import cx_Oracle
import os
import logging

logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):

logger.info('begin lambda_handler')

dsn = cx_Oracle.makedsn("hostname", "1521", "sid")
con = cx_Oracle.connect("user_id", "password", dsn)
cur = con.cursor()

#logger.info('username: ' + username)
#logger.info('host: ' + host)

sql = """SELECT COUNT(*) AS TEST_COUNT FROM DUAL"""

cur.execute(sql)
columns = [i[0] for i in cur.description]
rows = [dict(zip(columns, row)) for row in cur]
logger.info(rows)

con.close()
logger.info('end lambda_handler')
return "Successfully connected to oracle."

我在linux中创建了下面的结构,用于创建部署包。
父目录
-lib(在这个库下我放置了所有的oracle instant客户端文件)
-cx_oracle文件
lmbda_function.派
在AWS lambda上部署包并测试它之后,我得到了下面的错误。
[错误] DatabaseError:DPI-1047:找不到64位Oracle客户端库:“/var/task/lib/ www.example.com :file too short”.Seewww.example. www.example.com 寻求帮助Traceback(最后一次呼叫): 文件“/var/task/lambda_function。py”,第29行,在lambda_handler中
请有人帮助我实现这一点,如果有任何更好的选择从aws lambda连接oracle,请分享。

olqngx59

olqngx591#

我也遇到了同样的问题。在阅读this article之后,看起来您丢失了libaio.so.1文件。我猜你从windows机器上下载了即时客户端,因为据我所知,下载到windows平台时不包括libaio文件。我可以从this repo下载libaio.so.1文件。只要确保将它与其他oracle即时客户端文件放在lib文件夹中即可。

yquaqz18

yquaqz182#

1.截取一个Ec2示例
1.下载cx_Oracle-7。3.0-cp37-cp37m-manylux1_x86_64。whl - www.example.com
1.下载Oracle instant client -https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html(instantclient-basiclite-linux。x64-21.3.0.0。0)
1.下载lib 64 aio 1 -0.3.111-1pclos2018.x86_64.rpm
1.在Ec2示例中,请遵循以下步骤

  1. sudo yum更新
  2. Install pip(sudo yum install python3-pip)-如果没有安装pip。我认为默认情况下,我们将在EC2中获得pip。您可以通过运行命令“pip 3-version”来检查版本
    1.下一步是安装Pipenv。虚拟环境是一种工具,通过为不同项目创建虚拟Python环境,将不同项目所需的依赖项保存在不同的位置。
  3. sudo pip3 install virtualenv
  4. Virtualenv oraclelambda(某个文件夹名称),您将看到一个名为oraclelambda的目录
  5. source oraclelambda/bin/activate
    1.安装cx_Oracle-7。3.0-cp37-cp37m-manylux1_x86_64。whl(您会注意到cx_Oracle安装在oraclelambda目录中)
  6. sudo yum remove libaio-0.3.109-13.amzn2.0.2.x86_64
  7. sudo yum install lib64aio1-0.3.111-1pclos2018.x86_64.rpm
    1.接下来转到usr/lib 64-你会看到libaio。so.1.0.1(复制此文件)
    1.下一步提取oracle即时客户端
    1.粘贴Libaio。so.1.0.1文件到即时客户端文件夹中并重命名libaio。so.1.0.1文件到libaio。所以.1
    1.下一步是抓取即时客户端文件夹,例如它将是instantclient_21_3,从解压缩的zip文件夹中取出并压缩它
    1.创建一个名为python的新文件夹,并在python文件夹中创建另一个lib文件夹。
    1.下一步是复制python3。7文件夹,并将其放在phthon/lib文件夹中。文件夹结构为python\lib\python3。7\site-packages
    1.现在压缩python文件夹
    1.此时我们有两个zip文件
    1.即时客户端
    1.巨蟒
    1.上面的两个zip文件我们要在lambda层中更新它们
    1.创建lambda,将zip文件更新到层中,创建适当的安全组。
    1.请在lambda的环境变量中添加以下内容,以便它可以定位Oracle Instant Client库。
Key  = LD_LIBRARY_PATH
Value = /opt/
mfpqipee

mfpqipee3#

我也遇到过类似的问题。在我下载了Oracle客户端库& libaio并在创建Lambda Layer时将其与cx_Oracle捆绑在一起之后,这个问题得到了解决。您可以观看下面的视频,我为这次活动制作的视频。希望对你有帮助-https://www.youtube.com/watch?v=BYiueNog-TI&ab_channel=BorrowedCloud

相关问题