【发布时间】:2021-12-29 17:36:30
【问题描述】:
我目前正在使用带有 azure.storage.blob 12.9.0 版和 azure.core 1.14.0 版的 python v3.8.8。
我想使用 azure 中的 python SDK 来控制 blob 版本控制。理想情况下,我希望为给定的 BlobClient 提供以下 2 个函数。
- 通过指定的 versionId 获取 blob 的版本。
- 将此 blob 的版本设置为 blob 的“当前版本”。
在我的 Azure 帐户中,我已激活版本控制。这是我目前的设置。
from azure.storage.blob import ContainerClient
container_client = ContainerClient(
my_account_name,
my_container_name,
credential = my_credentials
)
container_client.upload_blob(my_blob_name, dummy_data)
blob_client = container_client.get_blob_client(my_blob_name)
blob_properties = blob_client.get_blob_properties()
for key, value in blob_properties.__dict__.items():
print(f'{key}: {value}')
查看 blob 属性时,我可以看到 version_id 是这个时间戳,is_current_version 是 True。然后我用follow上传了一个新版本。
blob_client.upload_blob(edited_dummy_data, overwrite=True)
blob_properties = blob_client.get_blob_properties()
for key, value in blob_properties.__dict__.items():
print(f'{key}: {value}')
然后版本 ID 发生了变化,is_current_version 仍然为 true。在 azure 门户上,我可以看到有一个以前的版本。我可以使用以下代码使用 python SDK 列出这些版本。
blob_list = container_client.list_blobs(name_starts_with = my_blob_name, include = ['versions'])
for blob_property in blob_list:
print(blob_property.name, blob_property.version_id)
但是,当尝试使用以下命令访问不同版本的 blob 时,我只会返回当前版本的 blob。
blob_list = container_client.list_blobs(name_starts_with = my_blob_name, include = ['versions'])
for blob_property in blob_list:
blob_client = container_client.get_blob_client(blob_property)
blob_properties = blob_client.get_blob_properties()
for key, value in blob_properties.__dict__.items():
print(f'{key}: {value}')
关于here 的类似问题已发布,但不适用于 python。此外,如果需要,我希望将 blob 恢复为以前的 id(我知道这可以使用指南 here 在 azure 门户中完成)。
我尝试在 blob 名称中使用参数 versionId,如下所示。
blob_client = container_client.get_blob_client(my_blob_name + '?versionId=' + old_version_id)
查看文档here 没有版本ID 的关键字。虽然我确实尝试过,但得到了一个不足为奇的错误。
任何帮助将不胜感激,或者只是知道此功能不可用也是有用的。
【问题讨论】:
标签: python azure version-control azure-sdk-python