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

Python SQLite如何检查各导入文件对应表的记录数

Python实现SQLite多表导入文件记录数统计的最优方法

需求说明

已通过Python将数据导入SQLite3数据库,当前共有15张表,需要统计每张表中各导入文件对应的记录数,期望输出格式如下:

+---------------+------------+-------------------------------------------+
|  Tablename    |  #Records  |              FilenameImported             |
+---------------+------------+-------------------------------------------+
| Tbl_RawData1  |     23680  |  442953-63fe-45fd-8378-c5f5fe5cb755.csv   |
| Tbl_RawData2  |     13358  |  bd3e609f-999f-4d29-845d-107bd5e205d6.csv |
| Tbl_RawData3  |     25000  |  Import.csv                               |
| Tbl_RawData4  |     15000  |  Importbis.csv                            |
+---------------+------------+-------------------------------------------+

目前在DBeaver中通过重复执行以下SQL实现:

select count(FileBase), FileBase from Tbl_RawData1 group by Filebase
select count(FileBase), FileBase from Tbl_RawData2 group by Filebase
select count(FileBase), FileBase from Tbl_RawData3 group by Filebase
...

最优实现方法

通过Python自动遍历数据库中的目标表,批量执行统计查询并格式化输出,无需手动编写重复SQL。

实现代码

import sqlite3
from tabulate import tabulate

# 替换为你的SQLite数据库文件路径
DB_PATH = 'your_database.db'

# 连接数据库
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()

# 获取所有以Tbl_RawData开头的用户表(可根据实际表名规则调整过滤条件)
cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name LIKE 'Tbl_RawData%';")
target_tables = [row[0] for row in cursor.fetchall()]

# 收集统计结果
stats_result = []
for table_name in target_tables:
    # 执行单表统计查询
    query = f"SELECT COUNT(FileBase) AS record_num, FileBase FROM {table_name} GROUP BY FileBase;"
    cursor.execute(query)
    # 将表名、记录数、文件名加入结果列表
    for record_count, filename in cursor.fetchall():
        stats_result.append([table_name, record_count, filename])

# 关闭数据库连接
conn.close()

# 格式化输出指定样式的表格
print(tabulate(
    stats_result,
    headers=["Tablename", "#Records", "FilenameImported"],
    tablefmt="grid",
    stralign="center"
))

关键说明

  1. 自动获取表名:利用SQLite的sqlite_master系统表查询所有用户创建的目标表,避免手动枚举15张表名,适配表数量变动的场景。
  2. 批量执行查询:通过循环遍历表名,统一执行统计SQL,减少重复代码。
  3. 美观格式化输出:使用tabulate第三方库快速生成符合要求的网格表格,无需手动拼接字符串。若未安装该库,执行pip install tabulate即可。
  4. 扩展性:若表名规则变化,只需修改sqlite_master查询中的过滤条件;若部分表无FileBase字段,可添加异常捕获逻辑跳过报错表。

无第三方库替代方案

如果不想依赖tabulate,可以手动格式化输出:

# 在收集完stats_result后执行以下代码
# 打印表头和分隔线
header = ["Tablename", "#Records", "FilenameImported"]
print("+---------------+------------+-------------------------------------------+")
print(f"|  {header[0]:<11}  |  {header[1]:^10}  |  {header[2]:<37}  |")
print("+---------------+------------+-------------------------------------------+")
# 打印每行数据
for row in stats_result:
    print(f"|  {row[0]:<11}  |  {row[1]:>10}  |  {row[2]:<37}  |")
print("+---------------+------------+-------------------------------------------+")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:55:25