如何使用节点js将csv文件导入postgresql?

时间:2015-05-07 07:48:30

标签: javascript node.js nodes

我是节点js的新手。

我的本​​地系统中有一个csv文件,我想使用节点js将其上传到本地PostgreSQL数据库。

我正在尝试以下代码:

var csv = require('csv-stream');
var request = require('request');
var fs = require('fs');

// All of these arguments are optional.
var options = {
    delimiter : '\t', // default is ,
    endLine : '\n', // default is \n,
// by default read the first line and use values found as columns 
   // columns : ['Settlement Ref No.', 'Order Type','Fulfilment Type','Seller SKU','wsn'],
    escapeChar : '"', // default is an empty string
    enclosedChar : '"' // default is an empty string
}

var csvStream = csv.createStream(options);
 fs.createReadStream('C:\\Users\\YAM\\Documents\\fk_starchi.csv').pipe(csvStream)
    .on('error',function(err){
        console.error(err);
    })
    .on('data',function(data){
        // outputs an object containing a set of key/value pair representing a line found in the csv file.
       // console.log(data);
    })
    .on('column',function(key,value){
        // outputs the column name associated with the value found
      // console.log('#' + key + ' = ' + value);
        console.log('# '   + value);

    })

其阅读数据。 现在我想在postgrsql数据库上导入它。

我在哪里可以获得教程或任何其他帮助来完成此任务。

1 个答案:

答案 0 :(得分:2)

我知道您要将此cvs文件导入Postgres。

有两个步骤。读取文件。写数据。

1)读取你用csv-stream完成的文件。我不太明白列事件的作用,但看起来'data'事件就是从哪里开始的。所以在那里添加你的代码。

2)写数据。

这有两条路线:

a)快速而肮脏。在'data'事件中,使用字符串制作SQL,然后使用像node-postgres这样的瘦库运行它们。

var sql = 'INSERT INTO table VALUES (' data.this + ',' + data.that + ',' + data.theotherthing + ');';

查看此示例的structure to start。您已熟悉流,因此您只需管理回调即可。

你的csv-stream会比postgress处理它们更快地产生SQL语句,所以你可以遇到1000个同时发出的请求。您可能希望批量同时查询字符串,和/或使用through2进行查询,等待,然后查询。

NOT 这样做的原因是有人可能会将SQL注入到CSV并废弃您的数据库。

b)执行此操作的明智方法(特别是在处理未知CSV时)是使用sequelize之类的ORM。

没有复制/粘贴并完成。一个好的开始就是阅读他们的homepage