Best way to overwrite Azure Blob in Python

Viewed 7508

If I try to overwrite an existing blob:

blob_client = BlobClient.from_connection_string(connection_string, container_name, blob_name)
blob_client.upload_blob('Some text')

I get a ResourceExistsError.

I can check if the blob exists, delete it, and then upload it:

try:
    blob_client.get_blob_properties()
    blob_client.delete_blob()
except ResourceNotFoundError:
    pass
blob_client.upload_blob('Some text')

Taking into account both what the python azure blob storage API has available as well as idiomatic python style, is there a better way to overwrite the contents of an existing blob? I was expecting there to be some sort of overwrite parameter that could be optionally set to true in the upload_blob method, but it doesn't appear to exist.

3 Answers

From this issue it seems that you can add overwrite=True to upload_blob and it will work.

If you upload the blob with the same name and pass in the overwrite=True param, then all the contents of that file will be updated in place.

   blob_client.upload_blob(data, overwrite=True)

During the update readers will continue to see the old data by default.(until new data is committed).

I think there is also an option to read uncommitted data as well if readers wish to.

Below from the docs:

overwrite (bool) – Whether the blob to be uploaded should overwrite the current data. If True, upload_blob will overwrite the existing data. If set to False, the operation will fail with ResourceExistsError. The exception to the above is with Append blob types: if set to False and the data already exists, an error will not be raised and the data will be appended to the existing blob. If set overwrite=True, then the existing append blob will be deleted, and a new one created. Defaults to False.

The accepted answer might work, but is potentially incorrect according to documentation;

azure.storage.blob.ContainerClient.upload_blob() can take the parameter overwrite=True See docs for ContainerClient

The documentation for azure.storage.blob.BlobClient.upload_blob() does not document an overwrite parameter See docs for BlobClient

Related