郵便番号のCSVデータを nodejsを使って適当にmysqlに登録してみる
ありがちなんだけど 郵便番号のCSVデータを nodejsを使って登録してみる(手抜きですが)
データのダウンロードはこちら 郵便番号検索。
コマンドは以下を参照
まずはDBを作成する
A5Mk2にて root - mysql を指定して接続 CREATE DATABASE DEMO;
とりあえず試してみるだけなので、テーブルも手抜き(笑
A5Mk2にて root - demo を指定して接続 CREATE TABLE POSTAL ( POSTAL char(8) CHARACTER SET utf8 DEFAULT NULL, PREF char(20) CHARACTER SET utf8 DEFAULT NULL, CITY char(40) CHARACTER SET utf8 DEFAULT NULL, ADRLINE1 char(40) CHARACTER SET utf8 DEFAULT NULL, ADRLINE2 char(40) CHARACTER SET utf8 DEFAULT NULL, ADRLINE4 char(40) CHARACTER SET utf8 DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
環境設定(追加のみ)
PS > npm install mysql npm WARN nodedb@1.0.0 No description npm WARN nodedb@1.0.0 No repository field. \+ mysql@2.14.1 PS >
地元県だと名前感あるので 17ISHIKA.CSV を使う
var async = require('async'); var csv = require('csv'); var fs = require('fs'); var iconv = require('iconv-lite'); var mysql = require('mysql'); var pool = mysql.createPool({ connectionLimit : 10, host : 'localhost', user : 'root', password : 'passwd', database : 'demo' }); // https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding iconv.skipDecodeWarning = true; //pool.on('acquire', function (con) { // console.log('Connection %d acquired', con.threadId); //}); // http://www.codexpedia.com/javascript/nodejs-mysql-pool-connection/ async.forEachSeries( fs.readFileSync('17ISHIKA.CSV', 'binary').toString().split('\n'), function (line, cb) { line = iconv.decode(line, 'Shift_JIS'); // Shift_JIS -> utf8 if (line.length > 0) { csv.parse(line, function(err, line){ csv.transform(line, function(line){ //console.log(line[2] + line[7] + line[8]); return line; }, function(err, line){ pool.getConnection(function(err, con) { if (err) { console.error('error connecting: ' + err.stack); return; } var sql = "insert into postal (postal, city, adrline1 ) values ('"+line[0][2]+"','"+line[0][7]+"','"+line[0][8]+"');" //console.log( "insert:" + sql); con.query(sql, function (err, result) { if (err) { console.log("err:" + sql); } con.release(); cb(); }); }); }); }); } else { console.log('END: '); process.exit(0); } }); select count(*) from postal -> 2552