SQLite3で作成したデータベースに対し、Automatorを利用してSQLを発行しデータ操作をすることが可能です。
SQLite3は、「.import」コマンドでCSVデータを取り込むことが可能ですが、今回は、CSVファイルのデータを、Automator経由でデータベースに格納してみたいと思います。
目次
事前準備
データベースの用意
前にDropTable文で、テーブルデータを消してしまったので、再度テーブルを作成します。
CREATE TABLE list(
MEI_CODE TEXT NOT NULL ,
MEI_MS TEXT NOT NULL ,
TRA_DATE TEXT NOT NULL ,
PRICE REAL NOT NULL ,
ST_PRI REAL NOT NULL ,
HI_PRI REAL NOT NULL ,
LW_PRI REAL NOT NULL ,
VOLUME INTEGER NOT NULL ,
UNIQUE(MEI_CODE,TRA_DATE)
);
元ネタCSVファイル
workフォルダ > Data.csv
9999,禄太システム,20220101,2950,3000,3100,2000,110000
9999,禄太システム,20220102,3000,2950,3200,2950,120000
9999,禄太システム,20220103,3050,3000,3250,3000,130000
ワークフローレシピ(イメージ)
ワークフロー構成
- クリップボードの内容を取得
- CSVをSQLに変換
- SQLを適用
- 結果を表示
【解説】①クリップボードの内容を取得
CSVファイルを、エディタで開きます。
開いたら、全選択(command+a)して、コピー(command+c)します。
クリップボードにコピーされた状態で、ワークフローを実行すると、クリップボード内の値を、Automatorが読み込んでくれます。
【解説】②CSVをSQLに変換
①でコピーしたクリップボード内のCSVを、SQLに変換します。
SQLは、【前】【行ごと】【後】の3パターンを指定できます。
今回は、1行ずつSQLを発行したいので、【行ごと】を選択します。
Insert into list(MEI_CODE,MEI_MS,TRA_DATE,PRICE,ST_PRI,HI_PRI,LW_PRI,VOLUME) values('%{1}@', '%{2}@', '%{3}@', %{4}@, %{5}@, %{6}@, %{7}@, %{8}@);
入力の現在行に含まれるフィールドの値を置き換える場合は、%{field}@フォーマットを使用してください。fieldは、1から始まるフィールドの番号です。入力の前または後にSQLを置く場合は、現在の行が入力の最初の行になります。
Apple inc
【解説】③SQLを適用
SQLを適用したいデータベースを指定します。
データベースは、ドロップダウンリストで指定することができます。
実行結果
Data.csvのデータをコピーして、ワークフローを実行します。
実行して成功すると、左上に緑のチェックマークがつきます。
ログが、正常終了していたら、完了です。
データの中身の確認(ターミナルで実行)
ターミナルからSQLiteを起動して、データが入っていたら成功です!
sqlite> select * from list;
9999|禄太システム|20220101|2950.0|3000.0|3100.0|2000.0|110000
9999|禄太システム|20220102|3000.0|2950.0|3200.0|2950.0|120000
9999|禄太システム|20220103|3050.0|3000.0|3250.0|3000.0|130000
EOF
大量のデータを投入したり、SQLを発行する際に便利かなと思い作ってみました。
どなたかのお役に立てたら幸いです。
今日も、一緒に勉強してくださって、ありがとうございました!
では、また!
%{field}@フォーマットで記載するのが、基本です。
ちなみに、文字列としたい場合は、'(シングルクォーテーション)を付することで、実現できました。