javascript - 是否可以与 node sqlite3 命令一起使用 import txt fil 并改进批量插入?
问题描述
我正在尝试将 csv 文件从节点导入到 sqlite 文件。
我尝试通过 npm package sqlite3 执行以下命令。
var db = new sqlite3.Database(':memory:');
db.run('.import "/Users/avito/PhpstormProjects/blog/typescript/src/app/services/workflow_temp.txt"'
+ 'INTO TABLE workflow_1_temp'
+ 'FIELDS TERMINATED BY ","'
+ 'ENCLOSED BY "\'"'
+ 'LINES TERMINATED BY \'\\n\''
+ 'IGNORE 1 ROWS'
+ ')');
我收到了这个错误
Error: SQLITE_ERROR: near ".": syntax error
当我通过命令行尝试这个时,它有效。可以在这个 npm 包中使用 sqlite3 功能吗?
.import 比批量插入更快吗?我想改进批量插入。当我插入 cca 1 000 000~5 秒时。当我创建 .txt 文件然后我通过 sqlite3 .import file.txt 使用导入时可能写得更快吗?
解决方案
不。“交互式解释器提供了一组元命令”,这意味着 .import 是在 sqlite3 二进制文件中实现的,而不是在 JavaScript 包使用的库中实现的。
请记住,默认情况下,sqlite 使用自动提交模式,这意味着每个语句的事务。如果您每行执行一个插入速度很慢。如果您一次批量插入 1000 行,则可以大大加快速度:
insert into t (c) values (v1), (v2), .... (v1000);
推荐阅读
- c# - 如何使用具有两个不同参数值的 HttpGet 方法
- c - 对外部函数的未定义引用 - C
- node.js - Node.js:签名验证(PS256)在 Node.js 中成功,但在 jwt.io 调试器中失败
- php - 为什么我在 Angular 中收到 HttpErrorResponse 错误?
- java - 发生键盘事件时 VideoView 重新启动
- azure - Notary init 不适用于 Microsoft azure 容器注册表
- signalr - 一个文件被分成几部分并从信号器核心的集线器发送到客户端
- android - 发布具有 SMS 权限的应用时出现问题
- java - 如何将 .jar 的“-XX:+UseG1GC -Xmx1g -Xms512m”参数放入服务包装器中?
- ios - 滑动时选择 CollectionView 单元格