Azure Cosmos DB - 基本操作(Python)
目的
Azure SDK for Python
を使用してAzure Cosmos DB
の基本操作を確認する
料金
上記より、
スループットは最小の400RU/秒、ストレージは100GBとした場合の1か月(30日)の料金は以下
スループット: 0.896 * 4 * 24 * 30 = 2580(円)
ストレージ: 28 * 100 = 2800(円)
合計: 5380(円)
無料枠
Azure Cosmos DBアカウントの作成時にFreeレベルの割引の適用を行うことで、
最初の400 RU/秒
と5GB
のストレージを無料で使用することができる
ただし、Freeレベルの割引の適用ができるAzure Cosmos DBアカウントは、Azure サブスクリプションにつき1つまで
アカウント内にデータベースを作成すると最小400RU/秒のスループット設定が必要となるため、
複数のデータベースを作成すると、2つ目以降のデータベースは無料枠外となる
基本操作
前提
公式
ドキュメントを参考にAzure Cosmos DBのアカウント、データベース、コンテナは作成済
以下2つのアイテムをコンテナに登録済
{
"id": "AndersenFamily",
"category": "category1",
"lastName": "Andersen",
"address": {
"state": "WA",
"county": "King",
"city": "Seattle"
},
"creationDate": 1431620472,
"isRegistered": true
}
{
"id": "WakefieldFamily",
"category": "category1",
"lastName": "Wakefield",
"address": {
"state": "NY",
"county": "Manhattan",
"city": "NY"
},
"creationDate": 1431610472,
"isRegistered": false
}
実装コード
Azure Cosmos DBのインスタンスを、エンドポイントURL+キーまたは、接続文字列を使用して生成
DB操作として、アイテムの追加、全アイテムリード、1アイテムリード、クエリ、アイテム削除を実施
from azure.cosmos import exceptions, CosmosClient, PartitionKey
endpoint = ''
key = ''
connectionString = ''
def main():
# client = CosmosClient(endpoint, key)
client = CosmosClient.from_connection_string(connectionString)
databaseName = 'tasks'
containerName = 'items'
db = client.get_database_client(databaseName)
container = db.get_container_client(containerName)
newItem = {
"id": "MillerFamily",
"category": "category1",
"lastName": "Miller",
"address": {
"state": "WA",
"county": "King",
"city": "Seattle"
},
"creationDate": 1431600472,
"isRegistered": True
}
item = container.create_item(newItem)
print(' --- create_item --- ')
print(item)
print()
items = container.read_all_items(max_item_count=5)
print(' --- read_all_items --- ')
print(list(items))
print()
item = container.read_item('MillerFamily', 'category1')
print(' --- read_item --- ')
print(item)
print()
# クエリ条件: id = 'WakefieldFamily'
# 取得プロパティ: 全て
query = "SELECT * FROM items i WHERE i.id = 'WakefieldFamily'"
# items = container.query_items(query, partition_key='category1')
items = container.query_items(query, enable_cross_partition_query=True)
print(' --- query_items 1 --- ')
print(list(items))
print()
# クエリ条件: lastName = 'Andersen'
# 取得プロパティ: 全て
query = "SELECT * FROM items i WHERE i.lastName = 'Andersen'"
items = container.query_items(query, enable_cross_partition_query=True)
print(' --- query_items 2 --- ')
print(list(items))
print()
# クエリ条件: address.state = 'WA'
# 取得プロパティ: 全て
query = "SELECT * FROM items i WHERE i.address.state = 'WA'"
items = container.query_items(query, enable_cross_partition_query=True)
print(' --- query_items 3 --- ')
print(list(items))
print()
# クエリ条件: id = 'WakefieldFamily'
# 取得プロパティ: address.state、address.city
query = "SELECT i.address.state, i.address.city FROM items i WHERE i.id = 'WakefieldFamily'"
items = container.query_items(query, enable_cross_partition_query=True)
print(' --- query_items 4 --- ')
print(list(items))
print()
container.delete_item('MillerFamily', 'category1')
main()
以下、実行結果
※Azure Cosmos DBで自動的に追加されるプロパティは出力内容から削除
--- create_item ---
{'id': 'MillerFamily', 'category': 'category1', 'lastName': 'Miller', 'address': {'state': 'WA', 'county': 'King', 'city': 'Seattle'}, 'creationDate': 1431600472, 'isRegistered': True}
--- read_all_items ---
[{'id': 'AndersenFamily', 'category': 'category1', 'lastName': 'Andersen', 'address': {'state': 'WA', 'county': 'King', 'city': 'Seattle'}, 'creationDate': 1431620472, 'isRegistered': True}, {'id': 'WakefieldFamily', 'category': 'category1', 'lastName': 'Wakefield', 'address': {'state': 'NY', 'county': 'Manhattan', 'city': 'NY'}, 'creationDate': 1431610472, 'isRegistered': False}, {'id': 'MillerFamily', 'category': 'category1', 'lastName': 'Miller', 'address': {'state': 'WA', 'county': 'King', 'city': 'Seattle'}, 'creationDate': 1431600472, 'isRegistered': True}]
--- read_item ---
{'id': 'MillerFamily', 'category': 'category1', 'lastName': 'Miller', 'address': {'state': 'WA', 'county': 'King', 'city': 'Seattle'}, 'creationDate': 1431600472, 'isRegistered': True}
--- query_items 1 ---
[{'id': 'WakefieldFamily', 'category': 'category1', 'lastName': 'Wakefield', 'address': {'state': 'NY', 'county': 'Manhattan', 'city': 'NY'}, 'creationDate': 1431610472, 'isRegistered': False}]
--- query_items 2 ---
[{'id': 'AndersenFamily', 'category': 'category1', 'lastName': 'Andersen', 'address': {'state': 'WA', 'county': 'King', 'city': 'Seattle'}, 'creationDate': 1431620472, 'isRegistered': True}]
--- query_items 3 ---
[{'id': 'AndersenFamily', 'category': 'category1', 'lastName': 'Andersen', 'address': {'state': 'WA', 'county': 'King', 'city': 'Seattle'}, 'creationDate': 1431620472, 'isRegistered': True}, {'id': 'MillerFamily', 'category': 'category1', 'lastName': 'Miller', 'address': {'state': 'WA', 'county': 'King', 'city': 'Seattle'}, 'creationDate': 1431600472, 'isRegistered': True}]
--- query_items 4 ---
[{'state': 'NY', 'city': 'NY'}]
使用クラス
インデックスについて
Azure Cosmos DB のインデックス作成 - 概要
すべてのアイテムのすべてのプロパティに自動的にインデックスが作成されるため、基本的にインデックスを作成する必要はない
Azure Cosmos DB での JSON の使用
入れ子になったプロパティを含め、すべてのプロパティでクエリが可能
Author And Source
この問題について(Azure Cosmos DB - 基本操作(Python)), 我々は、より多くの情報をここで見つけました https://qiita.com/takmot/items/f8cfe499b9b98bec4031著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .