Виконайте сценарій SQLite


102

Я запускаю sqlite3 версії 3.7.7, unix 11.4.2, використовуючи цю команду:

sqlite3 auction.db

де Auction.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

Версія SQLite SQLite не розуміє <файли, а ваша оболонка.


1
На жаль, не всі оболонки розуміють <як перенаправлення вводу. (Наприклад, PowerShell.)
Алан

@Alan PowerShell має якийсь механізм перенаправлення вхідних даних, чи не так? А якщо ні, то завжди є підхід бітопса .
mu занадто короткий

@muistooshort див. мій коментар до бітопів. Команди точки sqlite працюють у параметрі оператора 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 Так, це дуже близько до mu, це занадто коротка відповідь. Причиною того, що я додав додаткову відповідь, було продемонструвати метод швидкого виконання вбудованої команди, а не робити додатковий крок створення SQL-файлу для зберігання команди.
remeika

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

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


2

Якщо ви використовуєте CMD для Windows, ви можете скористатися цією командою для створення бази даних за допомогою sqlite3

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

Якщо у вас немає бази даних з такою назвою, sqlite3 створить її, і якщо у вас її вже є, вона все одно буде її запускати, але з помилкою "TABLENAME уже існує", я думаю, ви також можете використовувати цю команду, щоб змінити вже існуючу база даних (але я не впевнений)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.