猿问

Python 如何解析 Amazon RDS 数据服务的输出

我正在努力使用 Amazon RDS 数据服务https://docs.aws.amazon.com/rdsdataservice/latest/APIReference/API_ExecuteStatement.html解析 ExecuteStatement 操作的输出

文档很差,我找不到任何有意义的例子。

我正在使用 Aurora MySql 数据库

输出是这样返回的。这个例子是 SELECT 语句返回的 2 行数据,我用单词“数据”替换了实际数据

 {'ResponseMetadata': {'RequestId': '955a6aee-5bad-4f87-a455-b83a10a8a31b', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '955a6aee-5bad-4f87-a455-b83a10a8a31b', 'content-type': 'application/json', 'content-length': '809', 'date': 'Tue, 02 Jun 2020 05:39:22 GMT'}, 'RetryAttempts': 0}, 'numberOfRecordsUpdated': 0, 'records': [[{'stringValue': 'data'}, {'longValue': data}, {'stringValue': 'data'}, {'stringValue': 'data'}, {'stringValue': ''}, {'stringValue': 'data'}, {'stringValue': 'data'}, {'stringValue': 'data'}, {'stringValue': 'data'}, {'stringValue': 'data'}, {'stringValue': 'data'}, {'stringValue': 'data'}, {'stringValue': 'data'}], [{'stringValue': 'data'}, {'longValue': data}, {'stringValue': 'data'}, {'stringValue': 'data'}, {'stringValue': ''}, {'stringValue': 'data'}, {'stringValue': 'data'}, {'stringValue': 'data'}, {'stringValue': 'data'}, {'stringValue': 'data'}, {'stringValue': 'data'}, {'stringValue': 'data'}, {'stringValue': 'data'}]]}

我实际上只需要提取这个数据字段,所以我可以将它们用于另一个表中的 INSERT 语句。

根据文档原始响应是字典数据类型,所以我在这里得到 3 个键“ResponseMetadata”、“numberOfRecordsUpdated”和“records”。根据文档,“记录”是 Type: Array of Field 对象数组,这就是我卡住的地方。如何从字典中的数组数组中提取 Field 对象?


凤凰求蛊
浏览 130回答 2
2回答

呼啦一阵风

方法有很多,但最基本的 python 嵌套 for 循环就足够了:data_values = []for record in result['records']:    print()    row_data = []    for data_dict in record:        #print(data_dict)        for data_type, data_value in data_dict.items():            print(data_type, data_value)            row_data.append(data_value)    data_values.append(row_data)print(data_values)  该代码可以作为修改以满足您的需要的良好基础。它产生以下内容:stringValue datalongValue datastringValue datastringValue datastringValue stringValue datastringValue datastringValue datastringValue datastringValue datastringValue datastringValue datastringValue datastringValue datalongValue datastringValue datastringValue datastringValue stringValue datastringValue datastringValue datastringValue datastringValue datastringValue datastringValue datastringValue data并且data_values:[['data', 'data', 'data', 'data', '', 'data', 'data', 'data', 'data', 'data', 'data', 'data', 'data'], ['data', 'data', 'data', 'data', '', 'data', 'data', 'data', 'data', 'data', 'data', 'data', 'data']]

慕斯709654

你得到这个response = {'ResponseMetadata': {'HTTPHeaders': {'content-length': '809',                                      'content-type': 'application/json',                                      'date': 'Tue, 02 Jun 2020 05:39:22 GMT',                                      'x-amzn-requestid': '955a6aee-5bad-4f87-a455-b83a10a8a31b'},                      'HTTPStatusCode': 200,                      'RequestId': '955a6aee-5bad-4f87-a455-b83a10a8a31b',                      'RetryAttempts': 0}, 'numberOfRecordsUpdated': 0, 'records': [[{'stringValue': 'data'},              {'longValue': 'data'},              {'stringValue': 'data'},              {'stringValue': 'data'},              {'stringValue': ''},              {'stringValue': 'data'},              {'stringValue': 'data'},              {'stringValue': 'data'},              {'stringValue': 'data'},              {'stringValue': 'data'},              {'stringValue': 'data'},              {'stringValue': 'data'},              {'stringValue': 'data'}],             [{'stringValue': 'data'},              {'longValue': 'data'},              {'stringValue': 'data'},              {'stringValue': 'data'},              {'stringValue': ''},              {'stringValue': 'data'},              {'stringValue': 'data'},              {'stringValue': 'data'},              {'stringValue': 'data'},              {'stringValue': 'data'},              {'stringValue': 'data'},              {'stringValue': 'data'},              {'stringValue': 'data'}]]}您可以通过迭代读取您的行response['records']data_fields = []for row in response['records']:    for field in row:        if field['stringValue']:           print(field)           data_fields.append(field)        elif field['longValue']:           print(field)           data_fields.append(field)考虑通过 mysql 连接配置直接访问数据库来使用字典游标,这样您就不会看到 aws 请求元数据。import mysql.connectorcnx = mysql.connector.connect(user='username', password='password',                              host='aws rds mysql host',                              database='database_name')cnx.close()您可以从 AWS 控制台查看 mysql 连接详细信息。https://dev.mysql.com/doc/connector-python/en/connector-python-example-connecting.html
随时随地看视频慕课网APP

相关分类

Python
我要回答