【问题标题】:how to import csv file into postgresql using node js?如何使用节点 js 将 csv 文件导入 postgresql?
【发布时间】:2015-05-07 18:07:29
【问题描述】:

我是节点 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 数据库中。

我在哪里可以获得教程或任何其他帮助。

【问题讨论】:

  • 如果 postgres 有内置功能,为什么还需要 node?推荐人:stackoverflow.com/questions/2987433/…
  • 我还必须创建一个文件对话框,不会在 postgresql 中创建
  • 也许你可以在没有 csv 模块的情况下编写查询COPY zip_codes FROM '/path/to/csv/ZIP_CODES.txt' DELIMITER ',' CSV;
  • 应该是这样的http路径mycsv.com/file.csv
  • @RajatModi 如果我需要本地路径,那么我应该做些什么改变?

标签: javascript node.js nodes


【解决方案1】:

我了解到您想将此 cvs 文件导入 Postgres。

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

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

2) 写入数据。

有两种方法:

a) 又快又脏。在“数据”事件中,使用字符串制作 SQL,然后使用像 node-postgres 这样的瘦库运行它们。

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

查看此示例以获取 structure to start。您已经熟悉流,因此您只需要管理回调。

您的 csv-stream 生成 SQL 语句的速度比 postgress 处理它们的速度要快,因此您可能会遇到 1000 个并发请求。您可能希望批量将查询字符串 + 在一起,和/或使用 through2 进行查询,等待,然后查询。

这样做的原因是有人可以将 SQL 注入到 CSV 并丢弃您的数据库。

b) 执行此操作的明智方法(尤其是在处理未知 CSV 时)是使用像 sequelize 这样的 ORM。

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

【讨论】:

  • 我如何运行这个进行演示
猜你喜欢
  • 1970-01-01
  • 2020-03-23
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
  • 2016-03-14
  • 2018-10-13
  • 1970-01-01
  • 2017-03-03
相关资源
最近更新 更多