Выполнить скрипт SQLite

102

Я запускаю sqlite3 версии 3.7.7, unix 11.4.2 с помощью этой команды:

sqlite3 auction.db

где аукцион.db еще не создан.

sqlite> auction.db < create.sql;

дает мне эту ошибку: near "auction": syntax error

Как мне запустить скрипт?

Роза Перроне
источник

Ответы:

128

Есть много способов сделать это, один из них:

sqlite3 auction.db

С последующим:

sqlite> .read create.sql

В общем, у проекта SQLite действительно фантастическая документация! Я знаю, что мы часто обращаемся к Google раньше, чем за документами, но в случае с SQLite документы действительно представляют собой техническую письменность в лучшем виде. Он чистый, ясный и лаконичный.

битопс
источник
5
Для использования в scritps, вы можете запустить .readкоманду непосредственно из sqlite3команды: sqlite3 autction.db '.read create.sql'.
Крис Луенго
148

Вы хотите , чтобы кормить create.sqlINTO sqlite3из оболочки, а не внутри самого SQLite:

$ sqlite3 auction.db < create.sql

Версия SQL <для SQLite не понимает файлы, в отличие от вашей оболочки.

mu слишком короткий
источник
1
К сожалению, не все оболочки понимают <перенаправление ввода. (Например, PowerShell.)
Алан,
@Alan PowerShell имеет какой-то механизм перенаправления ввода, не так ли? А если нет, всегда есть подход битопса .
mu слишком короткий
@muistooshort см. мой комментарий к bitops. Команды sqlite dot работают с параметром оператора sql, поэтому вы можете читать нужный файл, не прибегая к перенаправлению ввода.
Chris Becke
@ChrisBecke, это разные решения. <немедленно выйдет из приглашения SQLite и вернет код ошибки в оболочку. .read file.sqlоставит приглашение вверх и -init file.sqlвсегда будет возвращать 0, поэтому <лучше всего подходит для сценариев. Также он кроссплатформенный, в отличие от .readкоторого не поддерживает пути Windows.
TWiStErRob
24

Я думаю, что для выполнения простых запросов и возврата к моему сценарию оболочки это хорошо работает:

$ sqlite3 example.db 'SELECT * FROM some_table;'
Remeika
источник
2
По сути, это слишком короткий ответ.
Полковник Тридцать Два,
12
@ColonelThirtyTwo Да, это очень близко к му, слишком короткий ответ. Причина, по которой я добавил дополнительный ответ, заключалась в том, чтобы продемонстрировать метод быстрого выполнения встроенной команды, вместо того, чтобы делать дополнительный шаг по созданию файла SQL для хранения команды.
Remeika
5
@remeika Я думаю, что более идиоматическим способом выполнения встроенной команды было бы sqlite3 example.db 'SELECT * FROM some_table;', вместо того, чтобы
передавать
1
Кроме того, (после редактирования) он демонстрирует, что sqlite3считывает команды для выполнения не только из stdin, но и из последнего аргумента.
Рафаэль Алмейда
4

Для тех, кто использует PowerShell

PS C:\> Get-Content create.sql -Raw | sqlite3 auction.db
сутенер
источник
2

Если вы используете Windows CMD, вы можете использовать эту команду для создания базы данных с помощью sqlite3

C:\sqlite3.exe DBNAME.db ".read DBSCRIPT.sql"

Если у вас нет базы данных с таким именем, sqlite3 создаст ее, а если она у вас уже есть, она все равно запустит ее, но с ошибкой «TABLENAME уже существует», я думаю, вы также можете использовать эту команду для изменения уже существующего база данных (но я не уверен)

Дэвид Брун
источник