2

我正在使用以下代码:

from azure.cosmosdb.table.tableservice import TableService
from azure.cosmosdb.table.models import Entity

table_service = TableService(account_name='', account_key='')

task = table_service.get_entity('table1', '71cb50aa-75ac-4363-a14e-26df95c9b418', 'SCHEDULE')
print(task)

task2 = table_service.query_entities('table1', filter=None, select=None, num_results=1, marker=None, accept='application/json;odata=minimalmetadata', property_resolver=None, timeout=None)

print(task2)

但是在编写python代码时,我不知道分区键。我想检查表'table1'的最新条目是否包含'SCHEDULE'。

4

1 回答 1

2

听起来您想知道如何使用下图的函数列出具有RowKey 值query_entities(table_name, filter=None, select=None, num_results=None, marker=None, accept='application/json;odata=minimalmetadata', property_resolver=None, timeout=None)的表的最新实体。table1SCHEDULE

在此处输入图像描述

据我所知,您需要使用filter参数来实现它,如下面的代码。

filter = "RowKey eq 'SCHEDULE'
task2 = table_service.query_entities('table1', filter=filter)
print(list(task2))

上面的代码将列出所有带有RowKey SCHEDULE和 unknownPartitionKey的实体,请参考官方文档Querying Tables and Entities了解更多使用filter参数的细节。

但是,由于不支持对实体进行排序Timestamp,所以无法直接通过filterand获取最新的实体num_results=1。如果有模式知道最新实体的时间戳范围,可以尝试使用下面的代码。

import datetime
from operator import itemgetter

filter = "RowKey eq 'SCHEDULE' and Timestamp lt datetime'{}'".format(datetime.datetime.utcnow().isoformat()) # such as `2019-07-29T07:41:40.897643`
# Or filter = "RowKey eq 'SCHEDULE' and Timestamp ge datetime'<the start of datetime range>' and Timestamp lt datetime'<the end of datetime range>'"
task2 = table_service.query_entities('table1', filter=filter)
    print(list(task2))
newlist = sorted(task2, key=itemgetter('Timestamp'))
latest_entity = newlist[0]
print(latest_entity)

如果您想要一个简单的解决方案,我认为带有表存储触发器的 Azure Function 会有所帮助,请参阅Azure Table storage bindings for Azure Functions支持 Python 的官方文档。

希望能帮助到你。

于 2019-07-29T07:48:05.803 回答