如何在S3中使用boto3进行版本控制?

时间:2016-02-22 03:39:39

标签: python amazon-s3 boto3

我正在使用带有boto3的版本化S3存储桶。如何检索给定密钥的所有版本(甚至所有密钥的所有版本)?我可以这样做:

for os in b.objects.filter(Prefix=pref):
    print("os.key")

但是这只给了我每个键的最新版本。

非常感谢,

2 个答案:

答案 0 :(得分:8)

import boto3

bucket = 'bucket name'
key = 'key'
s3 = boto3.resource('s3')
versions = s3.Bucket(bucket).object_versions.filter(Prefix=key)

for version in versions:
    obj = version.get()
    print(obj.get('VersionId'), obj.get('ContentLength'), obj.get('LastModified'))

由于我遇到同样的问题,我无法理解,但我发现了here

答案 1 :(得分:3)

boto3 s3客户端具有list_object_versions方法。

resp = client.list_object_versions(Prefix=prefix, Bucket=bucket)

for obj in [*resp['Versions'], *resp.get('DeleteMarkers', [])]:
    print(f"Key: {obj['Key']}")
    print(f"VersionId: {obj['VersionId']}")
    print(f"LastModified: {obj['LastModified']}")
    print(f"IsLatest: {obj['IsLatest']}")
    print(f"Size: {obj.get('Size', 0)/1e6}")

假设要删除除当前版本以外的所有版本,可以通过将IsLatest以外的对象添加到to_delete列表中,然后运行以下命令来实现:

for obj in to_delete:
    print(client.delete_object(Bucket=bucket, Key=obj['Key'], VersionId=obj['VersionId']))