我是节点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数据库上导入它。
我在哪里可以获得教程或任何其他帮助来完成此任务。
答案 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。