Могу ли я запустить скрипт в командной строке SQLite? - PullRequest
5 голосов
/ 07 апреля 2011

Могу ли я запустить скрипт с операторами SQL и.SQLite команды?

Ответы [ 4 ]

10 голосов
/ 08 апреля 2011

Смешивание операторов SQL с SQLite .commands может быть немного сложнее:

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

Самый простой и универсальный способ справиться с этим, вероятно, заключается в предоставлении всех команд для стандартного ввода оболочки командной строки SQLite3, разделенных символами новой строки, как вы их набираете:

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

Поскольку здесь документы доступны не во всех оболочках, вы можете использовать промежуточный файл, чтобы обойти это ограничение:

$ 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;
2 голосов
/ 14 мая 2015

У меня работает этот запрос:

sqlite3 test.db "select * from sometable"
1 голос
/ 01 сентября 2017

Конечно, вы можете.Используйте директиву .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;
0 голосов
/ 30 марта 2013
echo 'create table X(x integer); .dump' | sqlite3 test.db
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...