ОШИБКА загрузки AzureBlob: указанный большой двоичный объект уже существует - PullRequest
0 голосов
/ 02 декабря 2019

Я пытаюсь ежедневно загружать файл в контейнер Azure.

Я получил сообщение об ошибке: «Указанный большой двоичный объект уже существует» при загрузке файла с тем же файлом (я хочу перезаписать файл)

from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient

conn_str = yml['AZURE_BLOB']['CONN_STR']
container_name = yml['AZURE_BLOB']['CONTAINER_NAME']

# Create the BlobServiceClient that is used to call the Blob service for the storage account
blob_service_client = BlobServiceClient.from_connection_string(conn_str=conn_str)

# Create a blob client using the local file name as the name for the blob
blob_client = blob_service_client.get_blob_client(container=container_name, blob=destination_file_name)

# Upload the created file
data = fs.open(source_path,mode='rb').read()
blob_client.upload_blob(data)

print(destination_file_name+'\t......[DONE]')

Сообщение об ошибке:

azure.core.exceptions.ResourceExistsError: The specified blob already exists.
RequestId:13d062cd-801e-00a4-77c7-a81c56000000
Time:2019-12-02T04:18:06.0826908Z
ErrorCode:BlobAlreadyExists
Error:None

Ответы [ 2 ]

3 голосов
/ 02 декабря 2019

Если вы хотите перезаписать существующий BLOB-объект, используя Клиентская библиотека хранилища BLOB-объектов v12 , просто добавьте overwrite = True в методе upload_blob.

Здесьпример кода:

from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient

conn_str = "xxx"
container_name = "test6"

blob_service_client = BlobServiceClient.from_connection_string(conn_str=conn_str)
blob_client = blob_service_client.get_blob_client(container=container_name,blob="a1.txt")

with open("F:\\temp\\a1.txt","rb") as data:
    blob_client.upload_blob(data,overwrite=True)

print("**completed**")

После выполнения кода новый BLOB-объект загружается и существующий BLOB-объект может быть перезаписан. Снимок экрана, как показано ниже:

enter image description here

1 голос
/ 02 декабря 2019

Ознакомьтесь с этой записью в блоге о известной проблеме .

Это известная проблема с хранилищем для разработки. Это происходит, когда для загрузки блоков запущено несколько потоков (которые составляют большой двоичный объект). В основном происходит то, что хранилище для разработки использует SQL Server в качестве хранилища данных. Теперь первое, что он делает, это делает запись в таблицу, в которой хранится информация BLOB. Если работает несколько потоков, то все эти потоки будут пытаться выполнить одну и ту же операцию. После успешного завершения первого потока последующие потоки приведут к возникновению этого исключения.

...