2012-07-25 21 views
39

avvio in su sqlite3 versione 3.7.7, unix 11.4.2 con questo comando:Esegui uno script SQLite

sqlite3 auction.db 

dove auction.db non è già stato creato.

sqlite> auction.db < create.sql; 

mi da questo errore: near "auction": syntax error

Come posso eseguire lo script?

risposta

59

Ci sono molti modi per farlo, in un modo è:

sqlite3 auction.db

seguito da:

sqlite> .read create.sql

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

68

Si desidera alimentare la create.sql in sqlite3 dalla shell, non dall'interno SQLite per sé: la versione

$ sqlite3 auction.db < create.sql 

di SQLite di SQL non capisce < per i file, fa la shell.

+0

Purtroppo, non tutti i gusci capiscono '<' come redirezione di input. (Ad esempio, PowerShell.) – Alan

+0

@Alan PowerShell ha un meccanismo di reindirizzamento dell'input, no? E se no, c'è sempre l'approccio di [bitops] (http://stackoverflow.com/a/11643733/479863). –

9

Al fine di eseguire query semplici e tornare al mio script di shell, credo che questo funziona bene:

echo 'SELECT * FROM some_table;' | sqlite3 example.db 
+2

Questa è effettivamente la risposta di _mu è troppo short_. –

+6

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

+2

@remeika Penso che il modo più idiomatico per eseguire un comando inline sarebbe 'sqlite3 example.db 'SELECT * FROM some_table;'', piuttosto che eseguire il piping di un eco –