2012-07-25 10 views
39

pongo en marcha sqlite3 versión 3.7.7, 11.4.2 UNIX usando este comando:guión Ejecutar SQLite

sqlite3 auction.db 

donde auction.db no haya sido ya creado.

sqlite> auction.db < create.sql; 

me da este error: near "auction": syntax error

¿Cómo puedo ejecutar el script?

Respuesta

59

Hay muchas maneras de hacer esto, una forma es:

sqlite3 auction.db

seguido de:

sqlite> .read create.sql

En general, el proyecto de SQLite tiene documentación realmente fantástico! Sé que a menudo buscamos Google antes que los documentos, pero en el caso de SQLite, los documentos realmente son escritos técnicos en su mejor expresión. Es limpio, claro y conciso.

68

desea alimentar la create.sql en sqlite3 de la cáscara, no desde dentro de la propia SQLite: Versión

$ sqlite3 auction.db < create.sql 

de SQLite de SQL no entiende < para archivos, el shell lo hace.

+0

Por desgracia, no todas las conchas entienden '<' como redirección de entrada. (Por ejemplo, PowerShell.) – Alan

+0

@Alan PowerShell tiene algún mecanismo de redirección de entrada, ¿no? Y si no, siempre hay un enfoque de [bitops] (http://stackoverflow.com/a/11643733/479863). –

9

Con el fin de ejecutar consultas simples y volver a mi script de shell, creo que esto funciona así:

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

Esto es efectivamente _mu es la respuesta demasiado corta_. –

+6

@ColonelThirtyTwo Sí, esto está muy cerca de _mu es la respuesta demasiado corta_. La razón por la que agregué una respuesta adicional fue para demostrar un método para ejecutar rápidamente un comando en línea, en lugar de tomar el paso adicional de crear un archivo SQL para almacenar el comando. – remeika

+2

@remeika Creo que es la forma más idiomática de ejecutar un comando en línea sería 'sqlite3 example.db 'SELECT * FROM some_table;' ', en lugar de canalizar un eco –