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

Python在不知道密钥名称的情况下下载S3文件

Python在不知道密钥名称的情况下下载S3文件

噜噜哒 2021-09-02 16:36:31
我正在编写一个 Python 脚本,该脚本通过 Athena 运行查询,将其输出到 S3 并将其下载到我的计算机中。我能够通过 Athena 运行我的查询并将结果输出到 S3。所以我似乎无法弄清楚的下一步是如何在不知道密钥名称的情况下将其下载到我的计算机上?有没有办法在输出到 Athena 后在我的 python 脚本中查找对象键?我已经完成的:# Output location and DBs3_output = ‘s3_output_here’database = ‘database_here’# Function to run Athena querydef run_query(query, database, s3_output):    while True:        try:            response = client.start_query_execution(                QueryString=query,                QueryExecutionContext={                    'Database': database                    },                ResultConfiguration={                    'OutputLocation': s3_output,                    }                )            return response            break        except client.exceptions.TooManyRequestsException as e:            print('Too many requests, trying again after sleep')            time.sleep(100)# Our SQL Query    query = """SELECT *FROM test”””print("Running query to Athena...")res = run_query(query, database, s3_output)我了解如何使用此代码下载文件:try:    s3.Bucket(BUCKET_NAME).download_file(KEY, ‘KEY_HERE’)except botocore.exceptions.ClientError as e:    if e.response['Error']['Code'] == "404":        print("The object does not exist.")    else:        raise那么如何在运行我的第一个完整代码后读取密钥名称?
查看完整描述

1 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

您可以使用 boto 库提供的 get_key 命令获取密钥。这是我从 s3 下载东西的方式:


    with open("path/aws-credentials.json") as f:

        data= json.load(f)

        conn = boto.connect_s3(data["accessKeyId"], data["secretAccessKey"])

    bucket = conn.get_bucket('your_bucket')

    file_path = bucket.get_key('path/to/s3/file')

    file_path.get_contents_to_filename('path/on/local/computer/filename')

如果您只是在测试某些东西,您可以将您的凭据硬编码到代码中,但如果您计划将其投入生产,最好将您的凭据存储在外部,例如 json 文件。


查看完整回答
反对 回复 2021-09-02
  • 1 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

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