エクセルからINSERT文を作る、というのは定期的に発生するタスクですよねー。
で必要になる度にエクセル関数などでSQLを作ってたのですが、今回はpythonでファイル出力できるようにしてみました。
「xlsx python insert文」でググると結構作例がひっかかるんですが、重厚すぎだったりエクセル側のフォーマットが凝ってたりで、 もっと雑な感じでいいのになー、って感じでした(使う際に微調整すればいいやという発想)。
なので、雑に書きます。エクセル操作ライブラリは openpyxl を使用。
実装
で、コードがこんな感じです。 以下、前提条件。
- シート名がテーブル名
- 先頭行がカラム名
- 2行目以降がレコード
- カラム数の不一致とかは考慮してない
- 文字列の値はセルにダブルクォートで括って書く
- ダブルクォートをシングルクォートに変換してる(最初からエクセルにシングルクォートで書けば不要)
- NULL値はセルにNULLと書く
- 数値が指数表記になっちゃった場合とか考慮しない(確認もしてない)
- 出力はシート毎にファイル出力(上書き保存)
{table}.sql - 出力するSQLは
insert into {table} ({columns}) values (), ... ();って感じ
雑感
- 比較的短くかけたので次にまたinsert文作りたくなった時にも使い回しやすいんじゃないかな
- limaのdocker上で作ってたんだけど、ファイル出力のところで
read-only file systemみたいなエラーが出てハマった- 結局
writable: trueで mounts してた /tmp/lima/ 上で作業することで回避した。
- 結局
- pythonのlambda式は
lambdaというキーワードが長い