从 Python 应用程序调用 Amazon RDS 数据 API
您可以从 Python 应用程序调用 Amazon RDS 数据 API(数据 API)。
以下示例使用适用于 Python 的 Amazon 开发工具包(Boto)。有关 Boto 的更多信息,请参阅适用于 Python 的 Amazon 开发工具包(Boto 3)文档
在每个示例中,将数据库集群的 Amazon 资源名称(ARN)替换为您的 Aurora 数据库集群的 ARN。另外,将密钥 ARN 替换为 Secrets Manager 中允许访问该数据库集群的密钥的 ARN。
运行 SQL 查询
您可以运行 SELECT
语句并使用 Python 应用程序提取结果。
以下示例运行 SQL 查询。
import boto3
rdsData = boto3.client('rds-data')
cluster_arn = 'arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster
'
secret_arn = 'arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret
'
response1 = rdsData.execute_statement(
resourceArn = cluster_arn,
secretArn = secret_arn,
database = 'mydb
',
sql = 'select * from employees limit 3
')
print (response1['records'])
[
[
{
'longValue': 1
},
{
'stringValue': 'ROSALEZ'
},
{
'stringValue': 'ALEJANDRO'
},
{
'stringValue': '2016-02-15 04:34:33.0'
}
],
[
{
'longValue': 1
},
{
'stringValue': 'DOE'
},
{
'stringValue': 'JANE'
},
{
'stringValue': '2014-05-09 04:34:33.0'
}
],
[
{
'longValue': 1
},
{
'stringValue': 'STILES'
},
{
'stringValue': 'JOHN'
},
{
'stringValue': '2017-09-20 04:34:33.0'
}
]
]
运行 DML SQL 语句
您可以运行数据操作语言 (DML) 语句,在数据库中插入、更新或删除数据。在 DML 语句中也可以使用参数。
重要
如果调用由于未包含 transactionID
参数而不属于事务的一部分,则调用产生的更改将自动提交。
以下示例运行插入 SQL 语句并使用参数。
import boto3
cluster_arn = 'arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster
'
secret_arn = 'arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret
'
rdsData = boto3.client('rds-data')
param1 = {'name':'firstname', 'value':{'stringValue': 'JACKSON
'}}
param2 = {'name':'lastname', 'value':{'stringValue': 'MATEO
'}}
paramSet = [param1, param2]
response2 = rdsData.execute_statement(resourceArn=cluster_arn,
secretArn=secret_arn,
database='mydb
',
sql='insert into employees(first_name, last_name) VALUES(:firstname, :lastname)
',
parameters = paramSet)
print (response2["numberOfRecordsUpdated"])
运行 SQL 事务
您可以通过 Python 应用程序开始 SQL 事务、运行一个或多个 SQL 语句,然后提交更改。
重要
如果三分钟之内没有任何调用使用其事务 ID,事务将超时。如果事务在提交之前超时,则会自动回滚。
如果未指定事务 ID,则调用产生的更改将自动提交。
以下示例运行 SQL 事务在表中插入行。
import boto3
rdsData = boto3.client('rds-data')
cluster_arn = 'arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster
'
secret_arn = 'arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret
'
tr = rdsData.begin_transaction(
resourceArn = cluster_arn,
secretArn = secret_arn,
database = 'mydb
')
response3 = rdsData.execute_statement(
resourceArn = cluster_arn,
secretArn = secret_arn,
database = 'mydb
',
sql = 'insert into employees(first_name, last_name) values('XIULAN', 'WANG')
',
transactionId = tr['transactionId'])
cr = rdsData.commit_transaction(
resourceArn = cluster_arn,
secretArn = secret_arn,
transactionId = tr['transactionId'])
cr['transactionStatus']
'Transaction Committed'
response3['numberOfRecordsUpdated']
1
注意
如果运行数据定义语言 (DDL) 语句,我们建议在调用超时后继续运行语句。如果 DDL 语句在结束运行之前终止,则可能导致错误以及数据结构损坏。要在调用超过 RDS 数据 API 超时间隔(45 秒)后继续运行语句,请将 continueAfterTimeout
参数设置为 true
。