如何在Python中合并SQLite多同结构表并新增索引列
Python操作SQLite合并多表并新增索引列
实现步骤:
- 连接SQLite数据库:用Python内置的
sqlite3模块建立数据库连接。 - 获取目标表名:从数据库元数据中筛选出需要合并的表(自动排除SQLite系统表)。
- 创建合并表:复制任意一个原表的结构,新增一列用于标记数据来源(或序号索引)。
- 批量插入数据:循环遍历每个原表,将数据插入合并表,同时填充新增的索引列。
代码示例:
import sqlite3 # 连接目标SQLite数据库 conn = sqlite3.connect('your_database.db') cursor = conn.cursor() # 获取所有需合并的表名 cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%'") table_list = [row[0] for row in cursor.fetchall()] if not table_list: print("未找到可合并的表") conn.close() exit() # 创建合并表:复制第一个表的结构,新增source_table列标记数据来源 first_table = table_list[0] cursor.execute(f"CREATE TABLE IF NOT EXISTS merged_data AS SELECT *, '{first_table}' AS source_table FROM {first_table} LIMIT 0") # 循环插入各表数据 for table_name in table_list: cursor.execute(f"INSERT INTO merged_data SELECT *, '{table_name}' AS source_table FROM {table_name}") print(f"完成表 {table_name} 的数据插入") # 提交更改并关闭连接 conn.commit() conn.close() print("合并完成!合并表名为merged_data,source_table列记录数据来源表名")
可选调整:
- 用序号作为索引:如果不需要表名作为索引,而是用数字序号区分,修改循环部分:
for idx, table_name in enumerate(table_list, start=1): cursor.execute(f"INSERT INTO merged_data SELECT *, {idx} AS source_index FROM {table_name}")
此时新增列名为source_index,值为1、2、3...对应各原表的遍历顺序。
内容的提问来源于stack exchange,提问作者David Kwon
相关产品推荐
相关产品推荐

