2012/03/09

csvをsqlにする(insert, update)

検索すればいくらでも出てくるようなものをあえて作りました。csvをinsert文、update文に変換するコマンド。

昨日のこれと合わせると結構使えるかも。
例えばこういうCSVを
$ cat sample.csv 
aaa,bbb,ccc,ddd,eee
1,2,3,4,5
10,20,30,40,50
100,200,300,400,500
csv2sqlに渡すと
$ csv2sql sample.csv 
INSERT INTO sample (aaa , bbb , ccc , ddd , eee) VALUES ('1' , '2' , '3' , '4' , '5')
INSERT INTO sample (aaa , bbb , ccc , ddd , eee) VALUES ('10' , '20' , '30' , '40' , '50')
INSERT INTO sample (aaa , bbb , ccc , ddd , eee) VALUES ('100' , '200' , '300' , '400' , '500')

$ csv2sql -k aaa sample.csv
UPDATE sample SET aaa='1', bbb='2', ccc='3', ddd='4', eee='5' WHERE aaa='1'
UPDATE sample SET aaa='10', bbb='20', ccc='30', ddd='40', eee='50' WHERE aaa='10'
UPDATE sample SET aaa='100', bbb='200', ccc='300', ddd='400', eee='500' WHERE aaa='100'

$ csv2sql -k "aaa,ccc" sample.csv
UPDATE sample SET aaa='1', bbb='2', ccc='3', ddd='4', eee='5' WHERE aaa='1' AND ccc='3'
UPDATE sample SET aaa='10', bbb='20', ccc='30', ddd='40', eee='50' WHERE aaa='10' AND ccc='30'
UPDATE sample SET aaa='100', bbb='200', ccc='300', ddd='400', eee='500' WHERE aaa='100' AND ccc='300'
こんな感じ。CSVファイル名がTable名に、CSVのheader行がカラム名に。update文でキーまで更新してることに今ごろ気づいたけど気にしない。

ソース

Gaucheで書きました。ソースはこちら。

追記

update文でキーまで更新してることに今ごろ気づいたけど気にしない。 

対応した。


Scheme手習い

0 件のコメント:

コメントを投稿