하나의 쉘 명령으로 sqlite3에 여러 명령을 전달하는 방법

하나의 쉘 명령으로 sqlite3에 여러 명령을 전달하는 방법

클립보드 내용을 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;"

관련 정보