【Azure 儲存服務】Python模組(azure.cosmosdb.table)直接對錶儲存(Storage Account Table)做操作示例
什麼是表儲存
Azure 表儲存是一項用於在雲中儲存結構化 NoSQL 資料的服務,通過無結構化的設計提供鍵/屬性儲存。 因為表儲存無固定的資料結構要求,因此可以很容易地隨著應用程式需求的發展使資料適應儲存。Azure 表儲存可儲存大量結構化資料。 該服務是一個 NoSQL 資料儲存,接受來自 Azure 雲內部和外部的通過驗證的呼叫。 Azure 表最適合儲存結構化非關係型資料。 表儲存的常見用途包括:
- 儲存 TB 量級的結構化資料,能夠為 Web 規模應用程式提供服務
- 儲存無需複雜聯接、外來鍵或儲存過程,並且可以對其進行非規範化以實現快速訪問的資料集
- 使用聚集索引快速查詢資料
- 使用 OData 協議和 LINQ 查詢以及 WCF 資料服務 .NET 庫訪問資料
可以使用表儲存來儲存和查詢大型結構化非關係型資料集,並且表會隨著需求的增加而擴充套件。表儲存包含以下元件:
(內容來源於 Azure: https://docs.azure.cn/zh-cn/cosmos-db/table-storage-overview)
問題描述
是否有Python module可以直接對Storage Account Table(表儲存)進行操作呢? 有的。在查詢表儲存的Python文件後,它使用的Python module於cosmosDB一樣。在程式碼中引入azure.cosmosdb.table即可。
from azure.cosmosdb.table.tableservice import TableService from azure.cosmosdb.table.models import Entity
使用PIP安裝azure-cosmosdb-table模組。在VS Code中執行: python -m pip install azure-cosmosdb-table
操作程式碼
通過 Python 開始使用 Azure 表儲存和 Azure Cosmos DB 表 API
此示例介紹如何在常見的 Azure 表儲存方案中使用用於 Python 的 Azure Cosmos DB 表 SDK。 該 SDK 的名稱表示它適合與 Azure Cosmos DB 配合使用,但其實該 SDK 既適合與 Azure Cosmos DB 配合使用,也適合與 Azure 表儲存配合使用,只不過每個服務具有唯一的終結點。 本文使用 Python 示例探索這些方案,以演示如何:
- 建立和刪除表
- 插入和查詢實體
- 修改實體
Source:https://docs.azure.cn/zh-cn/cosmos-db/table-storage-how-to-use-python?toc=https%3A%2F%2Fdocs.azure.cn%2Fzh-cn%2Fstorage%2Ftables%2Ftoc.json&bc=https%3A%2F%2Fdocs.azure.cn%2Fzh-cn%2Fbread%2Ftoc.json
Python cosmosdb table模組中包含了對錶的所有原子操作。以下程式碼示例中包含了:
- 建立表:create_table
- 將實體新增到表:insert_entity
- 更新實體:update_entity / insert_or_replace_entity
- 修改多個實體: with table_service.batch(tablename) as batch
- 查詢實體: get_entity
- 查詢一組實體: table_service.query_entities(tablename, filter="PartitionKey eq 'tasksSeattle'")
- 查詢一部分實體屬性:table_service.query_entities(tablename, filter="PartitionKey eq 'tasksSeattle'", select='description')
- 刪除實體:delete_entity
- 刪除表:delete_table
全部程式碼:
from azure.cosmosdb.table.tableservice import TableService from azure.cosmosdb.table.models import Entity ##連線到 Azure 表服務, account_key的內容在Azure Storage Account的門戶中獲取(Storage Account --> Access Keys) table_service = TableService(account_name='you storage account name', account_key='your storage account key', endpoint_suffix='core.chinacloudapi.cn') ##建立表 tablename='tasktable2' table_service.create_table(tablename) ##將實體新增到表 task = {'PartitionKey': 'tasksSeattle', 'RowKey': '001', 'description': 'Take out the trash', 'priority': 200} table_service.insert_entity(tablename, task) ## Same way: # task = Entity() # task.PartitionKey = 'tasksSeattle' # task.RowKey = '002' # task.description = 'Wash the car' # task.priority = 100 # table_service.insert_entity(tablename, task) ##更新實體 print('##更新實體') task = {'PartitionKey': 'tasksSeattle', 'RowKey': '001', 'description': 'Take out the garbage', 'priority': 250} table_service.update_entity(tablename, task) ##如果要更新的實體不存在,更新操作將失敗。 如果要儲存實體(無論其存在與否) print('##如果要更新的實體不存在,更新操作將失敗。 如果要儲存實體(無論其存在與否)') # Replace the entity created earlier task = {'PartitionKey': 'tasksSeattle', 'RowKey': '001', 'description': 'Take out the garbage again', 'priority': 250} table_service.insert_or_replace_entity(tablename, task) # Insert a new entity task = {'PartitionKey': 'tasksSeattle', 'RowKey': '003', 'description': 'Buy detergent', 'priority': 300} table_service.insert_or_replace_entity(tablename, task) ##修改多個實體 print('##修改多個實體') task006 = {'PartitionKey': 'tasksSeattle', 'RowKey': '006', 'description': 'Go grocery shopping', 'priority': 400} task007 = {'PartitionKey': 'tasksSeattle', 'RowKey': '007',"MyAddColumn":"you know, thing changed, life goes on.", 'description': 'Clean the bathroom', 'priority': 100} with table_service.batch(tablename) as batch: batch.insert_entity(task006) batch.insert_entity(task007) ##查詢條目/實體 print('##查詢條目/實體') task = table_service.get_entity(tablename, 'tasksSeattle', '001') print(task.description) print(task.priority) ##查詢一組條目 print('##查詢一組條目') tasks = table_service.query_entities( tablename, filter="PartitionKey eq 'tasksSeattle'") for task in tasks: print(task.description) print(task.priority) ##查詢一部分實體屬性 print('##查詢一部分實體屬性') tasks = table_service.query_entities( tablename, filter="PartitionKey eq 'tasksSeattle'", select='description') for task in tasks: print(task.description) # ##刪除條目/實體 # print('##刪除條目/實體') # table_service.delete_entity(tablename, 'tasksSeattle', '001') # ##刪除表 # print('##刪除表') # table_service.delete_table(tablename)
執行結果:
參考文件
什麼是 Azure 表儲存?:https://docs.azure.cn/zh-cn/storage/tables/table-storage-overview
通過 Python 開始使用 Azure 表儲存和 Azure Cosmos DB 表 API: https://docs.azure.cn/zh-cn/cosmos-db/table-storage-how-to-use-python?toc=https%3A%2F%2Fdocs.azure.cn%2Fzh-cn%2Fstorage%2Ftables%2Ftoc.json&bc=https%3A%2F%2Fdocs.azure.cn%2Fzh-cn%2Fbread%2Ftoc.json
TableService Class: https://docs.microsoft.com/en-us/python/api/azure-cosmosdb-table/azure.cosmosdb.table.tableservice.tableservice?preserve-view=true&view=azure-python#insert-entity-table-name--entity--timeout-none-
&n