我在我的nodejs/express 应用程序中使用sqlite3 数据库。我想在启动 Express 服务器时将 .sql 文件导入到 sqlite 中。由于似乎没有办法使用 node-sqlite3 包导入,因此我尝试使用 exec 函数来执行此操作。
当我从命令行运行这两个命令时,它们都有效:
猫 db.sql | sqlite3 mydb.db sqlite3 mydb.db < 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);
}
);
Run Code Online (Sandbox Code Playgroud)
当我启动 Express 服务器时,我没有得到任何输出: Express 服务器正在监听 ip:localhost port:3000 stdout: stderr:
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)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3584 次 |
最近记录: |