我有一个用例需要使用 awsglue python shell 更新本地表。 请注意,我想在厚模式下使用 python-oracledb
据我了解,它不应该查找“tnsnames.ora”,因为我正在使用 jdbc url 。 寻找使用精简网址的代码的方法是什么 下面是我写的代码。有任何建议或错误请告诉我
import sys
import boto3
import oracledb
import ast
# Oracle connection details using Easy Connect string
session = boto3.session.Session()
client = session.client(service_name='secretsmanager')
def get_secret(secret_name):
# Create a Secrets Manager client
try:
get_secret_value_response = client.get_secret_value(SecretId=secret_name)
return get_secret_value_response
except Exception as e:
raise
def update_table(table_name):
try :
print("im here update table")
cred=get_secret("my_secret")
cred=ast.literal_eval(cred["SecretString"])
print(f"credentials {cred}")
user =cred["username"]
password =cred["password"]
conn_str = 'jdbc:oracle:thin://@my_host:my_port/my_service'
conn = oracledb.connect(user=user, password=password,dsn=conn_str)
cursor = conn.cursor()
cursor.execute("UPDATE my_table SET flag ='N' WHERE column ='xyz'")
conn.commit()
cursor.close()
conn.close()
return {
'statusCode': 200,
'body': json.dumps('Update successful')
}
except Exception as e:
raise
if __name__ == '__main__':
return_code = update_table("my_table")
Python 不是 Java,连接字符串也不同。 请参阅 python-oracledb 文档 JDBC 和 Oracle SQL Developer 连接字符串,了解如何将 JDBC 连接字符串映射到 python-oracledb 可用的内容。
您几乎肯定想使用:
conn_str = 'my_host:my_port/my_service'
另请参阅 使用 python-oracledb 'DPY-4027:没有配置目录来搜索 tnsnames.ora' 是什么意思