2014-02-13 240 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