【问题标题】:How to import a .sql file to sqlite via nodejs exec如何通过nodejs exec将.sql文件导入sqlite
【发布时间】:2014-05-22 15:29:00
【问题描述】:

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

当我从命令行运行这两个命令时,它们都可以工作:

cat db.sql | sqlite3 mydb.db sqlite3 mydb.db

但是,当我尝试通过 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 服务器监听 ip:localhost 端口:3000 标准输出: 标准错误:

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

我尝试了上面显示的两种方法,但它们都不起作用。我也尝试过使用 spawn ,但也没有成功。如何将 sql 文件导入 nodejs 中的新数据库?

【问题讨论】:

    标签: node.js sqlite


    【解决方案1】:

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

    var fs = require("fs")
    , spawn = require("child_process").spawn
    , child = spawn("sqlite3", ["mydb.db"])
    
    fs.createReadStream("./db.sql").pipe(child.stdin)
    

    【讨论】:

      猜你喜欢
      • 2011-01-04
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      • 2010-11-05
      • 2014-08-18
      • 2011-09-19
      相关资源
      最近更新 更多