我可以在SQLite命令行上运行脚本吗?
答
使用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;
答
echo 'create table X(x integer); .dump' | sqlite3 test.db
答
适合我这个查询:
sqlite3 test.db "select * from sometable"
答
当然可以。在命令行中使用.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;
这将无法正常工作 – Pungs 2014-12-22 09:07:28