Azure 表存储 Python API 中的分页和延续令牌

问题描述 投票:0回答:1

here提出了类似的问题,但从那时起,azure table 软件包已进行了显着更新,并且该解决方案不再起作用。

我正在使用 Azure 数据表包 V12.6.0:https://pypi.org/project/azure-data-tables/12.6.0/

对于我的聊天平台应用程序,我将每个对话保存在表存储的记录中,但是当用户加载聊天页面时,我只想使用其继续令牌每次加载获取 10 个结果,这样我就可以加载 10 个结果更多按需提供。

我见过几个 C# 示例,甚至还有一个 Java 示例,但没有见过一个 Python 示例。

这是我的代码,我用这个

每页结果

但是我似乎没有在工作,因为我获得了所有 200 条记录,而且我不知道在哪里可以找到延续令牌。

def get_chat_history(notebook_id: str, user_id: str):
    """
    Get the chat history for a notebook for a user.
    """
    table_service_client = connect_table_storage()
    table_name = os.getenv("AZURE_CHAT_HISTORY_TABLE_NAME")
    table_client = table_service_client.get_table_client(table_name=table_name)

    entities = table_client.query_entities(query_filter=f"NotebookId eq '{notebook_id}' and PartitionKey eq '{user_id}'",
                                           select=["Role", "Content"],
                                           results_per_page=10
                                           )
    chat_history = []
    for entity in entities:
        chat_history.append({
            "Timestamp": entity._metadata["timestamp"],
            "Role": entity["Role"],
            "Content": entity["Content"]
        })

    return chat_history
python database azure azure-table-storage
1个回答
0
投票

对于我的聊天平台应用程序,我将每个对话保存在表存储的记录中,但是当用户加载聊天页面时,我只想使用其继续令牌每次加载获取 10 个结果,这样我就可以加载 10 个结果更多按需提供。

您可以使用以下代码,通过 Azure python SDK 生成

Pagination
continuation

代码:

from azure.data.tables import TableServiceClient

def get_chat_history(notebook_id: str, user_id: str):

    table_service_client = TableServiceClient.from_connection_string("xxx"
    table_name = "xxx"
    table_client = table_service_client.get_table_client(table_name=table_name)

    entities = table_client.query_entities(query_filter=f"NotebookId eq '{notebook_id}' and PartitionKey eq '{user_id}'",
                                           select=["Role", "Content"],
                                           results_per_page=25
                                           ).by_page(None)
    chat_history = []
    for page in entities:  
        for entity in page: 
            chat_history.append({ 
                "Role": entity["Role"],
                "Content": entity["Content"]
            })
        print(len(chat_history))


get_chat_history("notebook_0", "user_0")

上述代码在表中查询与特定

NotebookId
PartitionKey
(user_id) 匹配的实体,仅选择
Role
Content
字段,结果按每页 25 个实体分页。

输出:

25
50
75
100
125
150
175
200
225
250

enter image description here

现在,您可以使用 for 循环为每个页面执行逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.