我可以在SQLite命令行上运行脚本吗?

时间:2011-04-07 18:34:10

标签: sqlite

我可以运行带有SQL语句的脚本吗? SQLite命令?

4 个答案:

答案 0 :(得分:10)

将SQL语句与SQLite .commands混合起来可能有点棘手:

$ 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并非在所有shell中都可用,因此您可以使用中间文件来绕过此限制:

$ 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 :(得分:2)

对我来说,这是一个问题:

sqlite3 test.db "select * from sometable"

答案 2 :(得分: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;

答案 3 :(得分:-1)

echo 'create table X(x integer); .dump' | sqlite3 test.db