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

如何用Python获取CrateDB表行数实现跨AWS区域恢复验证

问题原因

  • 你第一次查询用fetchall()拿到的TableList是单元素元组组成的列表,格式为[('doc.table1',), ('app.table2',)],循环时需要先取出元组内的表名字符串才能使用
  • 原脚本里第二次查询的SQL逻辑错误,不需要再查信息表,应该直接对循环到的表名执行COUNT(*)查询,把表名动态拼入SQL即可

修正后的完整代码

#!/usr/bin/env python3
import csv
from crate import client

# 可配置项,根据实际场景修改即可
CRATE_HOST = '10.30.76.251:4200'
SCHEMA_LIST = ('doc', 'shn')
OUTPUT_CSV = 'crate_table_row_count.csv'

def main():
    connection = client.connect(CRATE_HOST)
    cursor = connection.cursor()
    result = []

    try:
        # 第一步:查询所有符合条件的表的全限定名
        cursor.execute("""
            SELECT CONCAT(table_schema, '.', table_name) 
            FROM INFORMATION_SCHEMA.TABLES 
            WHERE table_schema IN (%s)
        """ % ','.join(f"'{s}'" for s in SCHEMA_LIST))
        table_list = cursor.fetchall()

        # 第二步:循环统计每个表的行数
        for table_tuple in table_list:
            table_name = table_tuple[0]
            cursor.execute(f"SELECT COUNT(1) FROM {table_name}")
            row_count = cursor.fetchone()[0]
            result.append((table_name, row_count))
            print(f"{table_name}: {row_count}")

        # 第三步:输出CSV文件,和原有bash版本格式完全一致
        with open(OUTPUT_CSV, 'w', newline='', encoding='utf-8') as f:
            writer = csv.writer(f)
            writer.writerows(result)
        print(f"统计结果已写入{OUTPUT_CSV}")

    finally:
        cursor.close()
        connection.close()

if __name__ == '__main__':
    main()

适配说明

输出的CSV文件和你原有bash版本生成的格式完全匹配,可直接用于跨区域恢复后的差异校验,不需要额外调整对比逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:36:04