Pesquisar este blog

terça-feira, 24 de agosto de 2021

Shell de linha de comando para SQLite - Parte 2

 

7.3. Funções de E / S de arquivo

O shell da linha de comando adiciona duas funções SQL definidas pelo aplicativo que facilitam a leitura do conteúdo de um arquivo em uma coluna da tabela e a gravação do conteúdo de uma coluna em um arquivo, respectivamente.

A função SQL readfile (X) lê todo o conteúdo do arquivo denominado X e retorna esse conteúdo como um BLOB. Isso pode ser usado para carregar conteúdo em uma tabela. Por exemplo:

sqlite> CREATE TABLE images(name TEXT, type TEXT, img BLOB);
sqlite> INSERT INTO images(name,type,img)
   ...>   VALUES('icon','jpeg',readfile('icon.jpg'));


A função SQL writefile (X, Y) grava o blob Y no arquivo denominado X e retorna o número de bytes gravados. Use esta função para extrair o conteúdo de uma única coluna da tabela em um arquivo. Por exemplo:

sqlite> SELECT writefile('icon.jpg',img) FROM images WHERE name='icon';

Observe que as funções readfile (X) e writefile (X, Y) são funções de extensão e não são construídas na biblioteca SQLite principal. Essas rotinas estão disponíveis como uma extensão carregável no arquivo de origem ext / misc / fileio.c nos repositórios de código-fonte SQLite .

7,4 A função SQL edit ()

A CLI possui outra função SQL integrada chamada edit (). Edit () leva um ou dois argumentos. O primeiro argumento é um valor - geralmente uma grande string de várias linhas a ser editada. O segundo argumento é o nome de um editor de texto. Se o segundo argumento for omitido, a variável de ambiente VISUAL será usada. A função edit () grava seu primeiro argumento em um arquivo temporário, invoca o editor no arquivo temporário, relê o arquivo de volta na memória após o editor terminar e retorna o texto editado.

A função edit () pode ser usada para fazer alterações em grandes valores de texto. Por exemplo:

sqlite> UPDATE docs SET body=edit(body) WHERE name='report-15';

Neste exemplo, o conteúdo do campo docs.body para a entrada em que docs.name é "report-15" será enviado ao editor. Depois que o editor retornar, o resultado será gravado de volta no campo docs.body.

A operação padrão de edit () é invocar um editor de texto. Mas, usando um programa de edição alternativo no segundo argumento, você também pode fazer com que ele edite imagens ou outros recursos não textuais. Por exemplo, se você deseja modificar uma imagem JPEG que está armazenada em um campo de uma tabela, você pode executar:

sqlite> UPDATE pics SET img=edit(img,'gimp') WHERE id='pic-1542';

O programa de edição também pode ser usado como um visualizador, simplesmente ignorando o valor de retorno. Por exemplo, para apenas olhar para a imagem acima, você pode executar:

sqlite> SELECT length(edit(img,'gimp')) WHERE id='pic-1542';


7,5. Importando arquivos CSV

Use o comando ".import" para importar dados CSV (valores separados por vírgula) para uma tabela SQLite. O comando ".import" leva dois argumentos que são a fonte da qual os dados CSV devem ser lidos e o nome da tabela SQLite na qual os dados CSV devem ser inseridos. O argumento de origem é o nome de um arquivo a ser lido ou, se começar com um "|" caractere, especifica um comando que será executado para produzir os dados CSV de entrada.

Observe que é importante definir o "modo" como "csv" antes de executar o comando ".import". Isso é necessário para evitar que o shell da linha de comando tente interpretar o texto do arquivo de entrada como algum outro formato.


sqlite> .import C:/work/somedata.csv tab1

Há dois casos a serem considerados: (1) A tabela "tab1" não existe anteriormente e (2) a tabela "tab1" já existe.

No primeiro caso, quando a tabela não existe anteriormente, a tabela é criada automaticamente e o conteúdo da primeira linha do arquivo CSV de entrada é usado para determinar o nome de todas as colunas da tabela. Em outras palavras, se a tabela não existe anteriormente, a primeira linha do arquivo CSV é interpretada como nomes de colunas e os dados reais começam na segunda linha do arquivo CSV.

Para o segundo caso, quando a tabela já existe, cada linha do arquivo CSV, incluindo a primeira linha, é considerada como conteúdo real. Se o arquivo CSV contiver uma linha inicial de rótulos de coluna, você pode fazer com que o comando .import ignore essa linha inicial usando a opção "--skip 1".


7,6. Exportar para CSV

Para exportar uma tabela SQLite (ou parte de uma tabela) como CSV, simplesmente defina o "modo" como "csv" e execute uma consulta para extrair as linhas desejadas da tabela.

sqlite> .headers on
sqlite> .mode csv
sqlite> .once c:/work/dataout.csv
sqlite> SELECT * FROM tab1;
sqlite> .system c:/work/dataout.csv

No exemplo acima, a linha ".headers on" faz com que os rótulos das colunas sejam impressos como a primeira linha de saída. Isso significa que a primeira linha do arquivo CSV resultante conterá rótulos de coluna. Se os rótulos das colunas não forem desejados, defina ".headers off". (A configuração ".headers off" é o padrão e pode ser omitida se os cabeçalhos não tiverem sido ativados anteriormente.)

A linha ".once FILENAME " faz com que toda a saída da consulta vá para o arquivo nomeado em vez de ser impressa no console. No exemplo acima, essa linha faz com que o conteúdo CSV seja gravado em um arquivo denominado "C: /work/dataout.csv".

A linha final do exemplo (o ".system c: /work/dataout.csv") tem o mesmo efeito que clicar duas vezes no arquivo c: /work/dataout.csv no Windows. Normalmente, isso abrirá um programa de planilha para exibir o arquivo CSV.

Esse comando só funciona como escrito no Windows. A linha equivalente em um Mac seria:

sqlite> .system open dataout.csv


No Linux e em outros sistemas unix, você precisará inserir algo como:

sqlite> .system xdg-open dataout.csv

7.6.1. Exportar para Excel

Para simplificar a exportação para uma planilha, a CLI fornece o comando ".excel" que captura a saída de uma única consulta e a envia para o programa de planilha padrão no computador host. Use-o assim:

sqlite> .excel
sqlite> SELECT * FROM tab;

O comando acima grava a saída da consulta como CSV em um arquivo temporário, invoca o manipulador padrão para arquivos CSV (geralmente o programa de planilha preferido, como Excel ou LibreOffice) e exclui o arquivo temporário. Este é essencialmente um método abreviado de fazer a sequência dos comandos ".csv", ".once" e ".system" descritos acima.

O comando ".excel" é realmente um apelido para ".once -x". A opção -x para .once faz com que ele grave os resultados como CSV em um arquivo temporário nomeado com um sufixo ".csv" e, em seguida, invoque o manipulador padrão do sistema para arquivos CSV.

Há também um comando ".once -e" que funciona de forma semelhante, exceto que nomeia o arquivo temporário com um sufixo ".txt" para que o editor de texto padrão do sistema seja chamado, em vez da planilha padrão.


Retirado de : https://www.sqlite.org/cli.html
Tradução livre
Retirado em : 24/08/2021

Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.