Executar script SQLite


99

Eu inicio o sqlite3 versão 3.7.7, unix 11.4.2 usando este comando:

sqlite3 auction.db

onde leilão.db ainda não foi criado.

sqlite> auction.db < create.sql;

me dá este erro: near "auction": syntax error

Como posso executar o script?

Respostas:


127

Existem muitas maneiras de fazer isso, uma delas é:

sqlite3 auction.db

Seguido por:

sqlite> .read create.sql

Em geral, o projeto SQLite tem uma documentação realmente fantástica! Eu sei que muitas vezes procuramos o Google antes dos documentos, mas no caso do SQLite, os documentos realmente são redações técnicas no seu melhor. É limpo, claro e conciso.


4
Para uso em scritps, você pode executar o .readcomando diretamente do sqlite3comando: sqlite3 autction.db '.read create.sql'.
Cris Luengo

145

Você quer alimentar o create.sqlpara sqlite3partir a casca, não de dentro de si SQLite:

$ sqlite3 auction.db < create.sql

A versão do SQLite do SQL não entende <para arquivos, seu shell sim.


1
Infelizmente, nem todos os shells são entendidos <como redirecionamento de entrada. (Por exemplo, PowerShell.)
Alan

@Alan PowerShell tem algum mecanismo de redirecionamento de entrada, não? E se não houver sempre a abordagem do bitops .
mu é muito curto

@muistooshort veja meu comentário sobre bitops. Os comandos sqlite dot funcionam no parâmetro de instrução sql para que você possa .read o arquivo que deseja sem recorrer ao redirecionamento de entrada.
Chris Becke

@ChrisBecke são soluções diferentes. <sairá do prompt SQLite imediatamente e retornará o código de erro ao shell. .read file.sqldeixará o prompt ativo e -init file.sqlsempre retornará 0, então <é o melhor para scripts. Também é multiplataforma, ao contrário do .readque não suporta caminhos do Windows.
TWiStErRob

23

Para executar consultas simples e retornar ao meu script de shell, acho que isso funciona bem:

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

2
Esta é efetivamente uma resposta muito curta .
Coronel Trinta e Dois de

11
@ColonelThirtyTwo Sim, isso está muito perto de mu é uma resposta muito curta . A razão pela qual adicionei uma resposta adicional foi para demonstrar um método para executar rapidamente um comando embutido, em vez de realizar a etapa adicional de criação de um arquivo SQL para armazenar o comando.
remeika

5
@remeika Acho que a maneira mais idiomática de executar um comando inline seria sqlite3 example.db 'SELECT * FROM some_table;', em vez de
enviar

1
Além disso, (após a edição), ele demonstra que sqlite3lê comandos para executar não apenas a partir stdin, mas também a partir do último argumento.
Rafael Almeida

4

Para quem usa PowerShell

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

2

Se você estiver usando o Windows CMD você pode usar este comando para criar um banco de dados usando sqlite3

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

Se você não tem um banco de dados com esse nome sqlite3 irá criar um, e se você já tiver um, ele irá executá-lo de qualquer maneira, mas com o erro "TABLENAME já existe", acho que você também pode usar este comando para alterar um já existente banco de dados (mas não tenho certeza)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.