Best way to overwrite Azure Blob in Python

Question:

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.

Asked By: Robert Hickman

||

Answers:

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

Answered By: Daniel Geffen

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

Answered By: thehappycheese

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.

Answered By: shadow0359
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.