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?

Rose Perrone
fonte

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.

bitops
fonte
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.

mu é muito curto
fonte
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;'
Remeika
fonte
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
pimbrouwers
fonte
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)

David Brun
fonte