【问题标题】:I cannot delete s3 object using one method, but i can delete using another. (obj.delete vs delete_object)我无法使用一种方法删除 s3 对象,但我可以使用另一种方法删除。 (obj.delete 与 delete_object)
【发布时间】:2020-09-03 23:05:27
【问题描述】:

使用客户端会话delete_object方法和obj.delete方法删除s3对象有什么区别?

打电话时

import boto3

session = boto3.Session(aws_access_key_id=aws_access_key_id,
                        aws_secret_access_key=aws_secret_access_key_emr,
                        region_name=region_name)
s3_client = session.client('s3')
s3_client.delete_object(Bucket=bucket_name, Key='input/df.parquet')

代码运行没有任何错误。

但是下面的代码

s3 = boto3.resource('s3')
obj = s3.Object(bucket_name, "input/df.parquet")
obj.delete()

导致ClientError;调用 DeleteObject 操作时发生错误(AccessDenied):访问被拒绝

在使用 aws 数据管理员库时也会发生类似的情况。以下代码的运行

import awswrangler as wr
wr.s3.delete_objects(f"s3://{bucket_name}/input/df.parquet") 

不删除任何内容,也不显示任何错误。

【问题讨论】:

    标签: python amazon-s3 boto3


    【解决方案1】:

    好的,解决了,我已将 s3 定义为 boto3.resource('s3') 而不是 session.resource('s3')

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-14
      • 2017-10-30
      • 2011-03-17
      • 2014-12-13
      • 2020-01-21
      相关资源
      最近更新 更多