gpt4 book ai didi

node.js - 如何通过 nodejs exec 将 .sql 文件导入到 sqlite

转载 作者:搜寻专家 更新时间:2023-11-01 00:02:11 24 4
gpt4 key购买 nike

我在我的 nodejs/express 应用程序中使用 sqlite3 数据库。我想在启动 express 服务器时将 .sql 文件导入 sqlite。由于似乎没有办法使用 node-sqlite3 包导入,我尝试使用 exec 函数来完成。

当我从命令行运行这两个命令时它们都有效:

cat 数据库.sql | sqlite3 mydb.dbsqlite3 mydb.db < 数据库.sql

但是,当我尝试通过 nodejs exec 函数运行这些命令中的任何一个时,会创建 mydb.db 文件,但它是空的。这是我的代码:

var exec = require('child_process').exec;

child = exec('cat db.sql | sqlite3 mydb.db',
function (error, stdout, stderr) {
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
if (error !== null) {
console.log('exec error: ' + error);
}
);

当我启动我的 express 服务器时,我没有得到任何输出: Express 服务器监听 ip:localhost 端口:3000 标准输出: 标准错误:

db文件已创建,但文件大小为0。当我用sqlite打开它时,mydb.db中没有表

如上所示,我尝试了两种方法,但均无效。我也尝试过使用 spawn,但也没有取得任何成功。如何将 sql 文件导入 nodejs 中的新数据库?

最佳答案

Pipe | 是一个用于链接命令的 shell 工具。在 Node 中,您需要分离命令并将第一个输出重定向到下一个输入。

var fs = require("fs")
, spawn = require("child_process").spawn
, child = spawn("sqlite3", ["mydb.db"])

fs.createReadStream("./db.sql").pipe(child.stdin)

关于node.js - 如何通过 nodejs exec 将 .sql 文件导入到 sqlite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23811144/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com