Boto S3 delete_keys 方法指示删除不存在的密钥

cap*_*mar 2 python amazon-s3 boto amazon-web-services

我在 s3 中使用 boto 的 delete_keys() 命令遇到以下问题。

这是我的测试场景:

import boto

conn = boto.connect_s3()
bucket = conn.get_bucket('mybucket')

key1 = boto.s3.key.Key('bucket','not_a_real_key1')
key2 = boto.s3.key.Key('bucket','not_a_real_key2')

result_set = bucket.delete_keys([key1,key2])

#the following should not print anything
for v in result_set.deleted:
  print v

#the following should return the two keys
for v in result_set.errors:
  print v
Run Code Online (Sandbox Code Playgroud)

根据注释行,由于这两个键不存在,我假设它们会被标记为错误而不是被删除。

这是标准行为吗?我不想使用 Key.exists() 方法,因为我正在迭代大量的键,这效率很低。

提前致谢。

gar*_*aat 5

这是 S3 的预期行为。当您删除不存在的键时,无论是单独删除还是在批量删除操作中,任何不存在的键都将被视为已删除的键,并且不会返回错误。

  • 需要澄清的是,S3 REST API 表现出这种行为,因此它会影响所有客户端库 - 删除对象会返回相同的成功响应,即使不存在此类对象也是如此。据推测,因为无论您删除一个对象多少次,它仍然同样消失了,无论它是否曾经存在过。S3 在对象删除上的最终一致性可能使此行为成为必要,因为您有可能(但不太可能)在删除对象一小段时间后获取该对象,导致您尝试再次删除它,到那时,第一次删除可能会发生已变得始终可见。 (2认同)