Python如何将sqlite数据库多表数据转为JSON格式写入文本文件
多表SQLite数据导出JSON调整方案
核心调整逻辑
- 把需要导出的5张表名存为列表,通过循环批量处理所有表,避免重复编写单表处理逻辑
- 新增外层总字典存储所有表的数据,键为表名,值为对应表的结构化转换结果,最后统一序列化写入final_data.txt
- 保留原逻辑中单表单独导出.js文件的功能
调整后完整代码
import json import sqlite3 import collections # 连接数据库 con = sqlite3.connect('/content/art.db') cursor = con.cursor() # 定义要导出的5张表名 table_list = ["table1", "table2", "table3", "table4", "table5"] # 总数据存储字典,key为表名,value为对应表的转换后数据 all_table_data = {} for table_name in table_list: # 查询当前表所有数据 cursor.execute(f'''SELECT * FROM {table_name}''') rows = cursor.fetchall() # 原逻辑:导出仅包含字段值的数组到对应表的.js文件 rowarray_list = [] for row in rows: t = (row[0], row[1]) rowarray_list.append(t) j = json.dumps(rowarray_list) with open(f"{table_name}.js", "w") as f: f.write(j) # 原逻辑:转换为带字段名的有序字典列表 objects_list = [] for row in rows: d = collections.OrderedDict() d["artwork_id"] = row[0] d["department_id"] = row[1] objects_list.append(d) # 将当前表数据存入总字典 all_table_data[table_name] = objects_list # 所有表处理完成后,统一序列化写入final_data.txt j = json.dumps(all_table_data, ensure_ascii=False) with open("final_data.txt", "w") as f: f.write(j) # 关闭数据库连接 con.close()
可选优化(适配字段不统一的场景)
如果你的5张表字段不都是artwork_id、department_id,可以用动态获取字段名的方法,无需硬写字段:
# 放在cursor.execute查询语句之后,获取当前查询结果的字段名列表 column_names = [desc[0] for desc in cursor.description] # 生成字典的时候遍历字段名自动赋值 for row in rows: d = collections.OrderedDict() for idx, col_name in enumerate(column_names): d[col_name] = row[idx] objects_list.append(d)
内容的提问来源于stack exchange,提问作者udaykumar gajavalli
相关产品推荐
相关产品推荐

