1. 程式人生 > >【Azure 儲存服務】Python模組(azure.cosmosdb.table)直接對錶儲存(Storage Account Table)做操作示例

【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