我目前正在使用 python v3.8.8 和 azure.storage.blob 的 12.9.0 版和 azure.core 的 1.14.0 版。
我想在 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。然后我使用以下內容上傳新版本。
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 仍然為真。在 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}')
在這里發布了一個類似的問題,但不是針對 python 的。此外,如果需要,我想將 blob 恢復為以前的 ID(我知道這可以使用此處的指南在azure 門戶中完成)。
我嘗試在 blob 的名稱中使用引數 versionId,如下所示。
blob_client = container_client.get_blob_client(my_blob_name '?versionId=' old_version_id)
查看此處的檔案,版本 ID 沒有關鍵字。雖然我確實嘗試過,但得到了一個不足為奇的錯誤。
任何幫助將不勝感激,或者只是知道此功能不可用也將很有用。
uj5u.com熱心網友回復:
get_blob_properties方法接受version_id引數,因此您需要做的是在獲取版本化 blob 的屬性時提供該引數。
本質上,您需要更改以下代碼行:
blob_properties = blob_client.get_blob_properties()
到
blob_properties = blob_client.get_blob_properties(version_id='blob version id')
更新
要使用其版本之一覆寫基本 blob,您只需start_copy_from_url在 blob 客戶端上使用方法并向其提供版本化 blob 的 URL。版本化 blob 的 URL 將與基本 blob 的 URL 相同,但帶有versionId作為查詢字串引數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/402595.html
標籤:
