2011-04-07 108 views

回答

10

使用SQLite .commands混合SQL语句可以是一个有点棘手:

$ sqlite3 test.db 'create table X(x integer); .dump' 
Error: near ".": syntax error 

对付这可能是提供的所有命令到sqlite3的命令行shell的标准输入的最简单,最普遍的方式,通过换行分隔,你会键入他们:

$ sqlite3 test.db <<EOF 
> CREATE TABLE TEST(X INTEGER); 
> .dump 
> EOF 
PRAGMA foreign_keys=OFF; 
BEGIN TRANSACTION; 
CREATE TABLE TEST(X INTEGER); 
COMMIT; 

由于here documents在所有的炮弹都无法使用,你可以使用一个中间文件来绕过这一限制:

$ cat test.sql 
CREATE TABLE TEST(X INTEGER); 
.dump 
$ sqlite3 test.db <test.sql 
PRAGMA foreign_keys=OFF; 
BEGIN TRANSACTION; 
CREATE TABLE TEST(X INTEGER); 
COMMIT; 
-1
echo 'create table X(x integer); .dump' | sqlite3 test.db 
+0

这将无法正常工作 – Pungs 2014-12-22 09:07:28

2

适合我这个查询:

sqlite3 test.db "select * from sometable" 
1

当然可以。在命令行中使用.read指令,您将会在那里。

创建脚本:

sample.sql

DROP TABLE IF EXISTS test; 
CREATE TABLE test (id PRIMARY KEY, 
        rand1 REAL DEFAULT (RANDOM()), 
        rand2 REAL DEFAULT (RANDOM())); 
INSERT INTO test (id) VALUES(1); 
INSERT INTO test (id) VALUES(2); 
.dump 

然后你可以运行你的脚本:

$ sqlite3 test.db '.read sample.sql' 
PRAGMA foreign_keys=OFF; 
BEGIN TRANSACTION; 
CREATE TABLE test (id PRIMARY KEY, rand1 REAL DEFAULT (RANDOM()), rand2 REAL DEFAULT (RANDOM())); 
INSERT INTO test VALUES(1,-479816953303475072.01,7897905953557517311.9); 
INSERT INTO test VALUES(2,3449088292611145728.0,-595585280596709760.01); 
COMMIT; 
相关问题