Ejecutar el script SQLite

99

Comienzo sqlite3 versión 3.7.7, unix 11.4.2 usando este comando:

sqlite3 auction.db

donde Auction.db aún no se ha creado.

sqlite> auction.db < create.sql;

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

¿Cómo puedo ejecutar el script?

Rosa Perrone
fuente

Respuestas:

127

Hay muchas formas de hacer esto, una de ellas es:

sqlite3 auction.db

Seguido por:

sqlite> .read create.sql

En general, ¡el proyecto SQLite tiene una documentación realmente fantástica! Sé que a menudo recurrimos a Google antes que los documentos, pero en el caso de SQLite, los documentos realmente son redacción técnica en su mejor momento. Es limpio, claro y conciso.

bitops
fuente
4
Para su uso en scritps, puede ejecutar el .readcomando directamente desde el sqlite3comando: sqlite3 autction.db '.read create.sql'.
Cris Luengo
145

Desea alimentar el create.sqlen sqlite3de la cáscara, no desde dentro de la propia SQLite:

$ sqlite3 auction.db < create.sql

La versión de SQL de SQLite no comprende los <archivos, su shell lo hace.

mu es demasiado corto
fuente
1
Desafortunadamente, no todos los shells entienden <como redirección de entrada. (Por ejemplo, PowerShell.)
Alan
@Alan PowerShell tiene algún mecanismo de redirección de entrada, ¿no? Y si no, siempre existe el enfoque de bitops .
mu es demasiado corto
@muistooshort ver mi comentario a bitops. Los comandos sqlite dot funcionan en el parámetro de instrucción sql para que pueda leer el archivo que desee sin recurrir a la redirección de entrada.
Chris Becke
@ChrisBecke son soluciones diferentes. <saldrá del indicador SQLite inmediatamente y devolverá el código de error al shell. .read file.sqldejará el indicador y -init file.sqlsiempre devolverá 0, por lo que <es lo mejor para la creación de scripts. También es multiplataforma, a diferencia de .readlo que no admite rutas de Windows.
TWiStErRob
23

Para ejecutar consultas simples y volver a mi script de shell, creo que esto funciona bien:

$ sqlite3 example.db 'SELECT * FROM some_table;'
remeika
fuente
2
Esta es efectivamente mu es una respuesta demasiado corta .
Coronel Treinta y Dos de
11
@ColonelThirtyTwo Sí, esto está muy cerca de mu es una 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 dar el paso adicional de crear un archivo SQL para almacenar el comando.
remeika
5
@remeika Creo que 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
emitir
1
Además, (después de la edición), demuestra que sqlite3lee comandos para ejecutar no solo desde stdin, sino también desde el último argumento.
Rafael Almeida
4

Para aquellos que usan PowerShell

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

Si está usando la CMD de Windows, puede usar este comando para crear una base de datos usando sqlite3

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

Si no tiene una base de datos con ese nombre sqlite3 creará una, y si ya tiene una, la ejecutará de todos modos, pero con el error "TABLENAME ya existe", creo que también puede usar este comando para cambiar una ya existente base de datos (pero no estoy seguro)

David Brun
fuente