代码之家  ›  专栏  ›  技术社区  ›  Lasit Pant

AWS RDS oracle python连接

  •  1
  • Lasit Pant  · 技术社区  · 8 年前

    我已经启动了一个RDS Oracle数据库实例,并希望使用python代码连接它。我使用cx\U oracle做了一些事情,但没有成功。 任何建议/帮助都会很好!

    提前感谢

    import cx_Oracle
    
    connstr = 'username/password@testinstance.cycxmhpviuwu.eu-west-1.rds.amazonaws.com:1521/orcl'
    conn = cx_Oracle.connect(connstr)
    

    我收到的错误消息是:

    cx\U Oracle。数据库错误:DPI-1047:无法加载32位Oracle客户端库:“找不到指定的模块”

    2 回复  |  直到 8 年前
        1
  •  2
  •   Asraful    4 年前

    您需要(a)安装32位Oracle客户端库,或(b)确保使用64位Python和64位cx\U Oracle。请参见 installation instructions 了解更多信息。

        2
  •  0
  •   Asraful    4 年前

    请检查,32位/64位库,以及 Installation Guide

    此外,您可以参考以下代码段

        from __future__ import print_function
        
        import cx_Oracle
        import boto3
        import base64
        import requests
        import json
        import configparser
        
        def connect_oracle(oracle_arn,oracle_host,oracle_port,oracle_db):
            session = boto3.session.Session()
            client = session.client('secretsmanager','us-west-2')
        
            response = client.get_secret_value(SecretId=oracle_arn)
            data = json.loads(response['SecretString'])
        
            dsn_tns = cx_Oracle.makedsn(oracle_host,oracle_port,oracle_db)
        
            conn = cx_Oracle.connect(data['username'],data['password'],dsn_tns)
        
            return conn
        
        
        
        def test_oracle_connect():
        
            #change the variable value as required 
            oracle_arn = 'oracle_arn'
            oracle_host = 'oracle_host'
            oracle_port = 'oracle_port'
            oracle_db = 'oracle_db'
            
            run_rds_test_scripts = 'true'
        
            if run_rds_test_scripts == 'true':
                conn = connect_oracle(oracle_arn,oracle_host,oracle_port,oracle_db)
        
                cur = conn.cursor()
                executed = cur.execute('select count(*) from dba_tables')
                res = cur.fetchmany(numRows=1)
        
                row_number = len(res)
        
                assert row_number == 1
                cur.close()
                conn.close()
            else:
                print('no run')
    
    test_oracle_connect()