こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!
- Pythonを用いてAzure CosmosDBに接続し、データベース&コンテナ内のデータを取得する方法が知りたい。
Azure CosmosDBとは
Azure CosmosDBとは、NoSQL(非関係型データベース)の一種であり、データを柔軟に保存・管理するためのオープンソースのデータベース管理システムです。
【事前準備】Azure CosmosDBの設定
AzureのCosmosDBに保存されたデータを参照する前に、以下が既に対応済みか確認しましょう。
データベース・コンテナ・アイテムの作成
Pythonを用いてCosmosDB内のデータを参照する場合、CosmosDB画面で「データベース」「コンテナ」「アイテム」がそれぞれ作成されているか事前確認が必要です。
Database | DatabaseはContainer(コンテナ)を管理するための作業空間を指します。複数のコンテナを一つのデータベース内でまとめて管理します。 |
Container | Containerは複数のItem(アイテム)を保存するために用います。 |
Item | Itemはドキュメントと呼ばれるJSON形式のデータを保存するためのものです。 |
Azure CosmosDBのエンドポイント・アクセスキー発行
データベース作成後、PythonでアクセスするためのURLとキーを取得します。
上図画面の画面を参考に、CosmosDBのデータベース画面からURLとPRIMARY KEYをそれぞれ取得しましょう。
- Azure CosmosDBの画面を開く
- 作成したデータベースを開く
- 設定タブにある「キー」を選択
- 「URL」および「PRIMARY KEY」をそれぞれ手元にメモする
【事前準備】AzureCosmosDB操作用Pythonライブラリのインストール
Pythonを用いてAzure CosmosDBを操作する場合、次のようなライブラリの事前インストールが必要です。
pip install azure-cosmos
【Python実践】Azure CosmosDBのデータ参照
実際にPythonを用いてCosmosDBを操作する方法について言及します。
CosmosDBの認証情報設定
PythonからCosmosDBにアクセスするための認証コードを記載します。
前述で取得したCOSMOS_URI
とCOSMOS_ACCESS_KEY
をそれぞれ記述した以下コードを実行しましょう。
from azure.cosmos import CosmosClient
# URI
COSMOS_URI = "..........."
# Primary Key
COSMOS_ACCESS_KEY = "..........."
# CosmosDB接続
cosmos_client = CosmosClient(COSMOS_URI, COSMOS_ACCESS_KEY)
データベース接続とコンテナプロパティ情報取得
CosmosDBに作成したデータベースを指定し、データベース内のコンテナ情報を取得する方法を解説します。
コード
DATABASE_NAME
に参照したいデータベース名を入力した上で以下コードを実行しましょう。
# ====================================================================
# 参照先(データベース)
# ====================================================================
# データベース名
DATABASE_NAME = "..........."
# ====================================================================
# CosmosDBのデータベース接続
# ====================================================================
# 参照先(データベース&コンテナ)の指定
cosmos_database = cosmos_client.get_database_client(DATABASE_NAME)
# コンテナ情報一覧取得
cosmos_container_list = list(cosmos_database.list_containers())
出力イメージ
上記で記述したcosmos_container_list
を出力すると、データベース内に作成されたコンテナのプロパティ情報が一覧表示されます。
# 出力
print(cosmos_container_list)
# 出力イメージ
# [{'id': 'Your Container Name',
# 'indexingPolicy': {'': '',
# 'automatic': True,
# 'includedPaths': [{'path': ''}],
# 'excludedPaths': [{'path': ''}]},
# 'partitionKey': {'paths': ['/id'], 'kind': 'Hash'},
# 'uniqueKeyPolicy': {'uniqueKeys': []},
# 'conflictResolutionPolicy': {'mode': '',
# 'geospatialConfig': {'type': ''},
# '_docs': 'docs/',
# '_conflicts': 'conflicts/'},
コンテナからJSON形式のデータ抽出
コンテナ内に保存されているJSON形式のデータ(アイテム)を抽出する方法について言及します。
コード
CONTAINER_NAME
に参照したいコンテナ名を入力した上で以下コードを実行しましょう。
# ====================================================================
# 参照先(コンテナ)
# ====================================================================
# コンテナ名
CONTAINER_NAME = "..........."
# ====================================================================
# CosmosDB データベース内の特定のコンテナに接続
# ====================================================================
# コンテナ
cosmos_container = cosmos_database.get_container_client(CONTAINER_NAME)
# ====================================================================
# コンテナ内のデータ参照
# ====================================================================
# クエリアイテム参照(select all from containers)
query = "SELECT * FROM c"
# データ取得
query_items = cosmos_container.query_items(query, enable_cross_partition_query=True)
listed_items = list(query_items)
上記を実行すると、指定したコンテナ内のアイテム情報が一括取得できます。アイテム情報の取得条件はquery
のSQL構文を修正することで柔軟に変更可能です。
出力イメージ
上記で記述したlisted_items
を出力すると、コンテナ内のアイテムデータが取得できます。
# 出力
print(listed_items)
# 出力イメージ
# [
# {'id': '1001',
# 'title': 'cosmos db (1)',
# 'description': 'this is the first project to use cosmosDB',}
#
# {'id': '1002',
# 'title': 'cosmos db (2)',
# 'description': 'this is the second project to use cosmosDB',}
#
# {'id': '1003',
# 'title': 'cosmos db (3)',
# 'description': 'this is the third project to use cosmosDB',}
# ]
データベース・SQL操作まとめ
当サイトではデータベースの設計ノウハウやSQL操作における基本構文の解説記事を多数配信しています。合わせてご覧ください。
データベース・SQL操作に関する記事一覧
データベースの設計手法やSQL操作における基本構文の解説記事を配信中です。
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら