为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

凤凰求蛊 2022-12-20 12:09:19
我正在努力使用 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 对象?
查看完整描述

2 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

方法有很多,但最基本的 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 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

并且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']]



查看完整回答
反对 回复 2022-12-20
?
慕斯709654

TA贡献1840条经验 获得超5个赞

你得到这个


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.connector


cnx = 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


查看完整回答
反对 回复 2022-12-20
  • 2 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信