You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Table备份拉取超1000行:目标表加日期后缀时报表不存在如何解决

问题原因

你调整代码后混淆了源表名和目标表名的参数传递。
原代码中源存储、目标存储的表名完全一致,所以函数内用同一个tb_name参数既做源表查询名、又做目标表写入名不会出问题。调整逻辑后目标表名追加了日期后缀,两者不再是同一个值,但你还是把带日期的目标表名传给了函数,分页查询源表下一页数据时,用带日期的名称去源存储查表,自然会报「表不存在」的错误。
另外你的代码还有一个隐性问题:today变量没有提前定义赋值,直接拼接也会触发运行错误。

修复方案

把函数的表名参数拆分为源表名、目标表名两个独立参数,分页查询时统一用源表名查源存储,写入时用目标表名写入目标存储即可,修复后代码如下:

from azure.cosmosdb.table.tableservice import TableService,ListGenerator
from datetime import date

table_service_out = TableService(account_name='', account_key='')
table_service_in = TableService(account_name='', account_key='')
query_size = 100
# 补全日期变量定义
today = date.today().strftime("%Y%m%d")

def queryAndSaveAllDataBySize(source_tb_name, target_tb_name, resp_data:ListGenerator ,table_out:TableService,table_in:TableService,query_size:int):
    for item in resp_data:
        # 移除表服务自动追加的etag和Timestamp
        del item.etag
        del item.Timestamp
        print(f"insert data:{str(item)} into table:{target_tb_name}")
        table_in.insert_or_replace_entity(target_tb_name,item)
    if resp_data.next_marker:
        # 分页查询源表时使用源表名
        data = table_out.query_entities(table_name=source_tb_name,num_results=query_size,marker=resp_data.next_marker)
        queryAndSaveAllDataBySize(source_tb_name, target_tb_name, data,table_out,table_in,query_size)


tbs_out = table_service_out.list_tables()
print(tbs_out)

for tb in tbs_out:
    source_table = tb.name
    target_table = tb.name + today
    # 在目标存储创建带日期后缀的对应表
    table_service_in.create_table(table_name=target_table, fail_on_exist=False)
    # 首次查询使用源表名查源存储
    data = table_service_out.query_entities(source_table,num_results=query_size)
    # 传入两个独立表名参数调用函数
    queryAndSaveAllDataBySize(source_table, target_table, data,table_service_out,table_service_in,query_size)

内容的提问来源于stack exchange,提问作者Nayden Van

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 14:36:03