我正在尝试将剪贴板内容保存到 sqlite 数据库中。创建了数据库和表。
我不希望它journal
在每次剪贴板更改中创建文件,所以我尝试传递PRAGMA journal_mode = OFF;
标志。但是在单行命令中传递这些命令很棘手,因为sqlite
只接受两个命令,例如
sqlite3 clipboard_archive.db "insert into cb (cb_context) values ('clipboard');"
有用。我寻找了Q&A
一些网站,一些建议按以下方式回显命令。
echo "PRAGMA journal_mode = OFF;" | sqlite3 clipboard_archive.db "insert into cb (cb_context) values ('clipboard');"
但PRAGMA journal_mode = OFF;
尽管它在命令提示符下工作,但不会以这种方式生效sqlite3
。
我的单行脚本出了什么问题?
答案1
德罗伯特的答案似乎不适用于点命令,但您可以使用-cmd
:sqlite3 tolls.sql3 -cmd ".mode csv" ".import tolls.csv tolls"
它接受多个-cmd
命令并在最终参数之前按顺序执行它们。
答案2
如果您不需要日志,不确定为什么要使用 SQLite(如果考虑速度,您是否考虑过更快的 WAL 模式?),但您可以给出用分号分隔的多个命令:
sqlite3 clipboard_archive.db "PRAGMA journal_mode = OFF; insert into cb (cb_context) values ('clipboard');"
答案3
你可以跑……
$ sqlite3 <database_file> '<statement_1>' ['<statement_n>']
例子…
$ sqlite3 data.db '.mode json' 'select * from my_table'
答案4
看来这个-cmd
开关不仅可以使用一次。这也适用于我(Windows 上的 SQLite 3.8.7.2):
sqlite3.exe yourdb.db -cmd ".mode column" -cmd ".headers on" "select * from persons;"