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

如何通过批处理文件将JSON数据插入SQLite数据库并解决语句不执行问题

批处理自动插入JSON数据到SQLite的解决方案

问题根因

你在批处理中直接执行sqlite3 数据库路径命令时,会启动SQLite的交互式命令行程序,批处理会进入阻塞状态等待人工输入指令,后续写在批处理中的INSERT语句属于批处理的后续命令行,不会被自动传入SQLite进程,所以完全不会执行。

解决方案(全自动无人工操作)

方案1:直接将SQL语句作为参数传入SQLite命令(最简便,适合短SQL)

直接把完整SQL语句用双引号包裹,跟在数据库路径后面即可,不需要启动交互式模式,执行完成后会自动退出,全程无人工操作。
修改后的完整批处理代码如下:

:: 过滤处理JSON文件
jq -r ".[]" D:\path\2\json_file\somedata.json > D:\path\2\json_file\somedata_new.json

:: 带SQL参数执行插入,执行完成自动退出
sqlite3 "C:\path\2\DB_Folder\db1.sqlite" "INSERT INTO mytable (col1, col2, col3, col4) SELECT json_extract(value, '$.col1'), json_extract(value, '$.col2'), json_extract(value, '$.col3'), json_extract(value, '$.col4') FROM json_each(readfile('D:\path\2\json_file\somedata_new.json'));"

方案2:从SQL文件导入(适合多语句、长SQL场景)

如果SQL逻辑复杂语句多,可以把所有SQL语句存为单独的import.sql文件,再通过重定向把文件内容传入SQLite执行,你之前用单独文件没生效大概率是调用方式不对,正确调用方式如下:

  1. 新建import.sql文件,写入SQL语句:
INSERT INTO mytable (col1, col2, col3, col4) SELECT json_extract(value, '$.col1'), json_extract(value, '$.col2'), json_extract(value, '$.col3'), json_extract(value, '$.col4') FROM json_each(readfile('D:\path\2\json_file\somedata_new.json'));
-- 可添加更多语句,比如查询插入结果验证
SELECT COUNT(*) AS 插入条数 FROM mytable;
  1. 批处理文件修改为:
jq -r ".[]" D:\path\2\json_file\somedata.json > D:\path\2\json_file\somedata_new.json
sqlite3 "C:\path\2\DB_Folder\db1.sqlite" < "C:\path\to\import.sql"

注意事项

  • 如果执行时提示找不到sqlite3命令,把sqlite3替换为sqlite3.exe的完整绝对路径即可,比如"C:\tools\sqlite3.exe"
  • 所有路径如果包含空格,必须用双引号包裹
  • 插入大量数据时可以在SQL语句首尾添加BEGIN TRANSACTION;和COMMIT;用事务包裹,插入性能提升非常明显

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:48:01