web-dev-qa-db-ja.com

AzureストレージにBLOBコンテナーが存在しない場合は作成します

PythonでAzureストレージにblobコンテナーを作成しようとしています。 [〜#〜] msdn [〜#〜] で提供されるドキュメントを使用して、Azure Blobストレージをpythonプログラムに統合します。

これがコードです:

_# Quick start code goes here
connectStr = <connString>
blobServiceClient = BlobServiceClient.from_connection_string(connectStr)
containerName = "quickstart-azureStorage"
localFileName = "quickstart-1.txt"
blobClient = blobServiceClient.create_container(containerName)
_

create_container()は初めてblobコンテナーを作成していますが、2回目にエラーが発生します。

BLOBコンテナーが存在しない場合は作成します。存在する場合は、既存のblobコンテナーを使用します

Azureストレージライブラリバージョン12.0.0を使用しています。つまり、_Azure-storage-blob==12.0.0_

以下のコードを使用して、コンテナーに存在するblobに対してそれを実行できることはわかっていますが、コンテナー自体を作成するためのものが見つかりませんでした。

Blobが存在するかどうかを確認します。

_blobClient = blobServiceClient.get_blob_client(container=containerName, blob=localFileName)
if blobClient:
    print("blob already exists")
else:
     print("blob not exists")
_

例外:

_RequestId:<requestId>
Time:2019-12-04T06:59:03.1459600Z
ErrorCode:ContainerAlreadyExists
Error:None
_
2
Prasad Telkikar

ライブラリの12.0.0バージョンでは、可能な解決策はget_container_properties()関数を使用することです。これは、コンテナーが存在しない場合にエラーになります。

container = ContainerClient.from_connection_string(connectStr, 'foo')

try:
    container_properties = container.get_container_properties()
    # Container foo exists. You can now use it.

except Exception as e:
    # Container foo does not exist. You can now create it.
    print(e)

コンテナが存在しない場合は、次のメッセージが表示されます。

指定されたコンテナは存在しません。

ErrorCode:ContainerNotFound

エラー:なし

2

低いバージョンのストレージSDKを受け入れることができます。Azure-storage-blob==2.1.0、blobまたはコンテナーが存在するかどうかを確認するexistsメソッドがあります。存在する場合は、trueまたはfalseを返します。

enter image description here

existsメソッドの後にfalseを返した場合はコンテナーを作成し、trueを返した場合はコンテナーを使用します。

1
George Chen

_create_container_ のドキュメントを見ると、次のように記載されています。

指定されたアカウントで新しいコンテナを作成します。同じ名前のコンテナがすでに存在する場合、操作は失敗します。

これを克服する1つの可能な解決策は、コンテナーを作成してエラーをキャッチすることです。コンテナがすでに存在する場合、Conflict (409)エラーコードが表示されます。これに基づいて、コンテナが存在するかどうかを判断できます。

SDKのダウングレードがオプションの場合は、_version 2.1_ of Python Storage SDKを使用できます。デフォルトの動作では、コンテナが存在する場合に例外をスローしません。コードを確認できます_create_container_の場合: https://github.com/Azure/azure-storage-python/blob/master/Azure-storage-blob/Azure/storage/blob/baseblobservice.py

1
Gaurav Mantri