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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:06:02