前提・実現したいこと
Pythonのアプリ内でsqlite3を使用し、batファイルでcsvを定期的に出力しようとしています。
ファイル名に日付を入れたいのですが、sqliteの.output の出力ファイル名の指定を動的にする方法がわかりません
発生している問題・エラーメッセージ
出力ファイル名の指定に変数や引数が使えず、同じ名前で上書きされ続けてしまう。
該当のソースコード
bat
1sqlite3 db.db < cmd.txt 2if %errorlevel% neq 0 ( 3echo "csv作れなかったかも" 4)
cmd.txt
1.output attend.csv 2.mode csv 3SELECT * FROM employee 4WHERE update >= (SELECT max(history) FROM updatehistory);
試したこと
select "log_"||replace(CURRENT_DATE,"-","")||"_"||replace(CURRENT_TIME,":","")||.csv;を.outputに指定。
→SQL文を.outputには使えないっぽい
"log_日付_時間.csv"の文字列を引数で渡す。
→環境変数%1をsqliteコマンドライン内では使えないっぽい
補足情報(FW/ツールのバージョンなど)
SQLite version3.8.1
https://sqlite.org/cli.html
18. Using sqlite3 in a shell script
にあるとおり、
・SQLスクリプトファイルを動的に生成するか
・第1引数のdatabase指定に続く、第2引数でSQLスクリプトの内容を記述する
ことができるそうなので、
[hoge.bat]
sqlite3 db.db ".output %1" ".read cmd.txt"
if %errorlevel% neq 0 (
echo "csv作れなかったかも"
)
[cmd.txt]
.mode csv
SELECT * FROM employee
WHERE update >= (SELECT max(history) FROM updatehistory);
としておけばバッチファイル側でCSVファイル名を変えられるのではないでしょうか?
Linuxではそんな感じの動作をするようでした。
Windowsでは確認していません。
ありがとうございます
参考にさせていただき、
SET FILENAME=log_%date:~0,4%%date:~5,2%%date:~8,2%.csv
sqlite3 db.db ".output %FILENAME%" <cmd.txt
if %errorlevel% neq 0 (
echo ”csv作れなかったかも”
)
のように、引数を2つ渡してあげたことで動的に出力ファイル名を変化させることが出来ました!
もしよければベストアンサーに選びたいので、回答の方にポストしていただけないでしょうか?
いえいえ、回答書くのは面倒なので、ご自身で自己解決しても、このままでも構いません。
回答1件
あなたの回答
tips
プレビュー