Выполнить скрипт 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 не понимает файлы, в отличие от вашей оболочки.


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;'

2
По сути, это слишком короткий ответ.
Полковник Тридцать Два,

12
@ColonelThirtyTwo Да, это очень близко к му, слишком короткий ответ. Причина, по которой я добавил дополнительный ответ, заключалась в том, чтобы продемонстрировать метод быстрого выполнения встроенной команды, вместо того, чтобы делать дополнительный шаг по созданию файла SQL для хранения команды.
Remeika

5
@remeika Я думаю, что более идиоматическим способом выполнения встроенной команды было бы sqlite3 example.db 'SELECT * FROM some_table;', вместо того, чтобы
передавать

1
Кроме того, (после редактирования) он демонстрирует, что sqlite3считывает команды для выполнения не только из stdin, но и из последнего аргумента.
Рафаэль Алмейда


2

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.