

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 透過 Python 應用程式呼叫 Amazon RDS 資料 API
<a name="data-api.calling.python"></a>

您可以透過 Python 應用程式呼叫 Amazon RDS 資料 API (資料 API)。

下列範例使用適用於 Python (Boto) 的 AWS SDK。如需 Boto 的更多詳細資訊，請參閱[適用於 Python 的AWS 開發套件 (Boto 3) 文件](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)。

在每個範例中，將資料庫叢集的 Amazon Resource Name (ARN) 取代為 Aurora 資料庫叢集的 ARN。同時也將秘密 ARN 取代為 Secrets Manager 中允許存取資料庫叢集的秘密 ARN。

**Topics**
+ [執行 SQL 查詢](#data-api.calling.python.run-query)
+ [執行 DML SQL 陳述式](#data-api.calling.python.run-inert)
+ [執行 SQL 交易](#data-api.calling.python.run-transaction)

## 執行 SQL 查詢
<a name="data-api.calling.python.run-query"></a>

您可以執行 `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 陳述式
<a name="data-api.calling.python.run-inert"></a>

您可以執行資料處理語言 (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 交易
<a name="data-api.calling.python.run-transaction"></a>

您可以開始 SQL 交易、執行一或多個 SQL 陳述式，接著使用 Python 應用程式遞交變更。

**重要**  
如果三分鐘內沒有使用交易 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 陳述式在完成執行前而終止時，可能會發生錯誤且資料結構可能毀損。若要在呼叫超過 45 秒的 RDS 資料 API 逾時間隔後繼續執行陳述式，請將 `continueAfterTimeout` 參數設為 `true`。