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" ))
关键说明
- 自动获取表名:利用SQLite的
sqlite_master系统表查询所有用户创建的目标表,避免手动枚举15张表名,适配表数量变动的场景。 - 批量执行查询:通过循环遍历表名,统一执行统计SQL,减少重复代码。
- 美观格式化输出:使用
tabulate第三方库快速生成符合要求的网格表格,无需手动拼接字符串。若未安装该库,执行pip install tabulate即可。 - 扩展性:若表名规则变化,只需修改
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
相关产品推荐
相关产品推荐

