2014-02-13 280 views
7

我正在編寫一個scp項目的shell腳本,其中一部分涉及到在我的數據庫中傳輸一些重要的表。從命令行運行Sqlite3腳本

我有以下存儲在文件中SQLTableTransfer

.o MyTable1.sql; 
.dump MyTable1; 

.o MyTable2.sql; 
.dump MyTable2; 

.o MyTable3.sql; 
.dump MyTable3; 

,並就

$ sqlite3 SQLTableTransfer 

一個機會,但是,這只是拉開了SQLITE3外殼。從命令行運行這樣的腳本的正確方法是什麼?

+0

http://stackoverflow.com/問題/ 10045035/how-to-execute-an-sql-script-file-against-an-sqlite-3-database-file – SirBraneDamuj

+0

我看到類似這樣的東西,但那是從命令行執行SQL語言,我需要它執行Sqlite語言。 – rwolst

+0

如果這些是在sqlite3命令行輸入的命令,那麼這種方法應該仍然有效。總的想法是,你將文件的內容發送到sqlite3的標準輸入。所以不是使用鍵盤輸入,而是使用該文件的輸入。你已經試過了嗎? – SirBraneDamuj

回答

18

您給sqlite3程序的參數是數據庫文件名。

從文件中執行命令,則必須輸入重定向到文件:

$ sqlite3 mydatabase.db < SQLTableTransfer 

或告訴它從文件中讀取:

$ sqlite3 mydatabase.db ".read SQLTableTransfer" 
+0

好的,謝謝。但是由於某些原因,當我在使用'.dump'的時候,它只是傾銷表 'PRAGMA foreign_keys = OFF; BEGIN TRANSACTION; COMMIT;' – rwolst

+0

Nvm,修復它謝謝(y) – rwolst

+0

最近我一直在試圖導入一個包含國家字符,如德國_äöüß_的utf8編碼的SQL腳本,事實證明,第二種方法是唯一可行的方法。每個其他解決方案只導入問號(我需要它的PowerShell腳本)。 – t3chb0t