Esegui script SQLite


99

Avvio sqlite3 versione 3.7.7, unix 11.4.2 usando questo comando:

sqlite3 auction.db

dove Auction.db non è già stato creato.

sqlite> auction.db < create.sql;

mi dà questo errore: near "auction": syntax error

Come posso eseguire lo script?

Risposte:


127

Ci sono molti modi per farlo, un modo è:

sqlite3 auction.db

Seguito da:

sqlite> .read create.sql

In generale, il progetto SQLite ha una documentazione davvero fantastica! So che spesso cerchiamo Google prima dei documenti, ma nel caso di SQLite, i documenti sono davvero la scrittura tecnica al suo meglio. È pulito, chiaro e conciso.


4
Per l'utilizzo in scritps, è possibile eseguire il .readcomando direttamente dal sqlite3comando: sqlite3 autction.db '.read create.sql'.
Cris Luengo

145

Vuoi create.sqlinserire in sqlite3dalla shell, non dall'interno di SQLite stesso:

$ sqlite3 auction.db < create.sql

La versione SQLite di SQL non comprende i <file, la tua shell sì.


1
Sfortunatamente, non tutte le shell vengono interpretate <come reindirizzamento dell'input. (Ad esempio, PowerShell.)
Alan,

@Alan PowerShell ha un meccanismo di reindirizzamento dell'input, no? E se non c'è sempre l' approccio di bitops .
mu è troppo breve il

@muistooshort vedi il mio commento a bitops. I comandi sqlite dot funzionano nel parametro dell'istruzione sql in modo da poter leggere il file desiderato senza ricorrere al reindirizzamento dell'input.
Chris Becke

@ChrisBecke sono soluzioni diverse. <uscirà immediatamente dal prompt di SQLite e restituirà il codice di errore alla shell. .read file.sqllascerà attivo il prompt e -init file.sqlrestituirà sempre 0, quindi <è il migliore per lo scripting. Inoltre è multipiattaforma a differenza di .readcui non supporta i percorsi di Windows.
TWiStErRob

23

Per eseguire query semplici e tornare al mio script di shell, penso che funzioni bene:

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

2
Questa è effettivamente la risposta di mu è troppo breve .
Colonnello Trentadue

11
@ColonelThirtyTwo Sì, questo è molto vicino alla risposta di mu è troppo breve . Il motivo per cui ho aggiunto una risposta aggiuntiva è stato quello di dimostrare un metodo per eseguire rapidamente un comando inline, piuttosto che eseguire il passaggio aggiuntivo di creare un file SQL in cui memorizzare il comando.
remeika

5
@remeika Penso che il modo più idiomatico per eseguire un comando in linea sarebbe sqlite3 example.db 'SELECT * FROM some_table;', piuttosto che convogliare un'eco
Christopher Shroba

1
Inoltre, (dopo la modifica), dimostra che sqlite3legge i comandi da eseguire non solo stdindall'ultimo argomento, ma anche dall'ultimo.
Rafael Almeida

4

Per coloro che utilizzano PowerShell

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

2

Se stai usando Windows CMD puoi usare questo comando per creare un database usando sqlite3

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

Se non hai un database con quel nome, sqlite3 ne creerà uno e se ne hai già uno lo eseguirà comunque ma con l'errore "TABLENAME già esistente", penso che tu possa usare questo comando anche per cambiare un già esistente database (ma non sono sicuro)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.