郵便番号のCSVデータを nodejsを使って適当にMSSQL2016 Expressに登録してみる
環境はWin10 Pro x64 + MSSQL 2016 Express x64 node8.4 x64
ありがちなんだけど 郵便番号のCSVデータを nodejsを使って登録してみる(手抜きですが)
データのダウンロードはこちら 郵便番号検索。
MSSQLのポートの設定はここレッスン 2: 別のコンピューターからの接続
相変わらずMSSQLの設定は メニューの入り方が バラバラだなぁ・・・
まずはSSMSでDBを作成する
とりあえず試してみるだけなので、テーブルも手抜き(笑
CREATE TABLE [dbo].[POSTAL]( [POSTAL] [nchar](8) NULL, [PREF] [nchar](20) NULL, [CITY] [nchar](40) NULL, [ADRLINE1] [nchar](40) NULL, [ADRLINE2] [nchar](40) NULL, [ADRLINE4] [nchar](40) NULL ) ON [PRIMARY]
環境設定(追加のみ)
PS > npm install tedious-connection-pool npm WARN nodedb@1.0.0 No description npm WARN nodedb@1.0.0 No repository field. \+ tedious-connection-pool@1.0.5 added 10 packages in 13.939sPS >
地元県だと名前感あるので 17ISHIKA.CSV を使う
var async = require('async'); var ConnectionPool = require('tedious-connection-pool'); var Request = require('tedious').Request; var TYPES = require('tedious').TYPES; var fs = require('fs'); var iconv = require('iconv-lite'); var csv = require('csv'); var connectionConfig = { userName: 'demo', password: 'passwd', server: 'localhost', options: { database: 'demo' } }; var poolConfig = { min: 5, max: 10, log: false } var pool = new ConnectionPool(poolConfig, connectionConfig); pool.on('error', function(err) { console.error(err); }); // https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding iconv.skipDecodeWarning = true; async.forEachSeries( fs.readFileSync('17ISHIKA.CSV', 'binary').toString().split('\n'), function (line, cb) { line = iconv.decode(line, 'Shift_JIS'); //iconv-liteでShift-jisからutf8に変換 if (line.length > 0) { csv.parse(line, function(err, line){ csv.transform(line, function(line){ return line; }, function(err, line){ pool.acquire(function (err, connection) { if (err) { console.error(err); return; } //console.log(line[2], " " + line[7], " " + line[8]); request = new Request("INSERT INTO POSTAL (POSTAL, CITY, ADRLINE1) VALUES (@POSTAL, @CITY, @ADRLINE1);", function(err) { if (err) { console.log(err); } connection.release(); cb(); }); request.addParameter('POSTAL', TYPES.NVarChar, line[2]); request.addParameter('CITY', TYPES.NVarChar, line[7]); request.addParameter('ADRLINE1', TYPES.NVarChar, line[8]); connection.execSql(request); }); }); }); } else { console.log('END'); pool.drain(); process.exit(0); } }, function(err) { console.log('fin'); pool.drain(); process.exit(0); }); select count(*) from postal -> 2552