SQLite: Como salvar o resultado de uma consulta como um arquivo CSV?

158

Eu sou novo no SQLite. Existe uma maneira de exportar os resultados de uma consulta para um arquivo CSV?

RayLoveless
fonte
Exportar a partir do shell, uma linha: stackoverflow.com/a/21741408/911945
Anton Tarasenko 25/10

Respostas:

248

A partir daqui e o comentário de d5e5:

Você precisará alternar a saída para o modo csv e alternar para a saída do arquivo.

sqlite> .mode csv
sqlite> .output test.csv
sqlite> select * from tbl1;
sqlite> .output stdout
gdw2
fonte
4
onde esse arquivo está sendo salvo?
RayLoveless #
34
É impresso na saída padrão, ou seja, sua tela provavelmente. Para salvar a saída em um arquivo: sqlite> .output test.csv Para restaurar a impressão de resultados para a tela: sqlite> .output stdout
d5e5
1
Ponteiros sobre onde posso descobrir como fazer isso na biblioteca do Nó?
kuanb
2
Use sqlite> .output C: /Users/jdoe/Documents/output.csv se desejar usar um caminho específico.
Dustin
Oi! Eu fiz isso. Embora minha consulta tenha funcionado perfeitamente, a saída do arquivo está vazia. Alguém sabe o porquê?
Valeria Lobos Ossandón 22/10
144

Para incluir nomes de colunas no seu arquivo CSV, você pode fazer o seguinte:

sqlite> .headers on
sqlite> .mode csv
sqlite> .output test.csv
sqlite> select * from tbl1;
sqlite> .output stdout

Para verificar as alterações que você fez, você pode executar este comando:

sqlite> .show

Resultado:

echo: off   
explain: off   
headers: on   
mode: csv   
nullvalue: ""  
output: stdout  
separator: "|"   
stats: off   
width: 22 18 
Sai Bharath
fonte
3
Obrigado por mostrar como obter os nomes das colunas! Essa resposta precisa ser maior.
Stan James
Observe que o sqlite3 anexa a saída ao final do arquivo sem apagar o conteúdo anterior.
kupgov
1
Mas cada .output filename.csvexecução cria ou apaga o arquivo.
kupgov
25

Boas respostas de gdw2 e d5e5. Para simplificar um pouco, aqui estão as recomendações reunidas em uma única série de comandos:

sqlite> .mode csv
sqlite> .output test.csv
sqlite> select * from tbl1;
sqlite> .output stdout
crsierra
fonte
23

Além das respostas acima, você também pode usar de .oncemaneira semelhante à .output. Isso gera apenas a próxima consulta para o arquivo especificado, para que você não precise segui-lo .output stdout.

Então, no exemplo acima

.mode csv
.headers on
.once test.csv
select * from tbl1;
Esteira
fonte
1

Como alternativa, você pode fazer isso em uma linha (testada no win10)

sqlite3 -help
sqlite3 -header -csv db.sqlite 'select * from tbl1;' > test.csv

Bônus: usando o PowerShell com cmdlet e pipe (|).

get-content query.sql | sqlite3 -header -csv db.sqlite > test.csv

em que query.sql é um arquivo que contém sua consulta SQL

Alexis
fonte