Wykonaj skrypt SQLite


102

Uruchamiam sqlite3 w wersji 3.7.7, unix 11.4.2 za pomocą tego polecenia:

sqlite3 auction.db

gdzie aukcja.db nie została jeszcze utworzona.

sqlite> auction.db < create.sql;

daje mi ten błąd: near "auction": syntax error

Jak mogę uruchomić skrypt?

Odpowiedzi:


128

Można to zrobić na wiele sposobów, jednym z nich jest:

sqlite3 auction.db

Śledzony przez:

sqlite> .read create.sql

Ogólnie rzecz biorąc, projekt SQLite ma naprawdę fantastyczną dokumentację! Wiem, że często sięgamy po Google przed dokumentami, ale w przypadku SQLite dokumenty są naprawdę techniczne w najlepszym wydaniu. Jest czysty, jasny i zwięzły.


5
Do stosowania w scritps, można uruchomić .readkomendę bezpośrednio z sqlite3poleceniem: sqlite3 autction.db '.read create.sql'.
Cris Luengo

148

Chcesz wprowadzić create.sqldo sqlite3z powłoki, a nie z samego SQLite:

$ sqlite3 auction.db < create.sql

Wersja SQLite w SQLite nie obsługuje <plików, twoja powłoka tak.


1
Niestety nie wszystkie powłoki rozumieją <jako przekierowanie danych wejściowych. (Np. PowerShell.)
Alan

@Alan PowerShell ma jakiś mechanizm przekierowania danych wejściowych, prawda? A jeśli nie, zawsze jest podejście firmy Bitops .
mu jest za krótkie

@muistooshort zobacz mój komentarz do bitops. Polecenia sqlite dot działają w parametrze instrukcji sql, więc możesz odczytać żądany plik bez uciekania się do przekierowywania danych wejściowych.
Chris Becke,

@ChrisBecke to różne rozwiązania. <natychmiast opuści monit SQLite i zwróci kod błędu do powłoki. .read file.sqlpozostawi znak zachęty i -init file.sqlzawsze zwróci 0, więc <jest najlepszy do tworzenia skryptów. Jest również wieloplatformowy, w przeciwieństwie do tego, .readktóry nie obsługuje ścieżek systemu Windows.
TWiStErRob

24

Myślę, że aby wykonać proste zapytania i wrócić do mojego skryptu powłoki, to działa dobrze:

$ sqlite3 example.db 'SELECT * FROM some_table;'

2
To jest faktycznie odpowiedź mu jest za krótka .
pułkownik trzydzieści dwa

12
@ColonelThirtyTwo Tak, to jest bardzo blisko odpowiedzi mu jest za krótka . Powodem, dla którego dodałem dodatkową odpowiedź, było zademonstrowanie metody szybkiego wykonania polecenia wbudowanego, zamiast podejmowania dodatkowego kroku w tworzeniu pliku SQL do przechowywania polecenia.
remeika

5
@remeika Myślę, że bardziej idiomatycznym sposobem wykonania polecenia wbudowanego byłoby sqlite3 example.db 'SELECT * FROM some_table;', zamiast
wypisywania

1
Ponadto (po edycji) pokazuje, że sqlite3odczytuje polecenia do wykonania nie tylko z stdin, ale także z ostatniego argumentu.
Rafael Almeida

4

Dla tych, którzy używają PowerShell

PS C:\> Get-Content create.sql -Raw | sqlite3 auction.db

2

Jeśli używasz CMD systemu Windows, możesz użyć tego polecenia, aby utworzyć bazę danych przy użyciu sqlite3

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

Jeśli nie masz bazy danych o tej nazwie sqlite3 utworzy ją, a jeśli już ją masz, i tak ją uruchomi, ale z błędem "TABLENAME już istnieje", myślę, że możesz również użyć tego polecenia do zmiany już istniejącego baza danych (ale nie jestem pewien)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.