AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 40656
Accepted
Kshitiz Sharma
Kshitiz Sharma
Asked: 2013-04-23 21:24:46 +0800 CST2013-04-23 21:24:46 +0800 CST 2013-04-23 21:24:46 +0800 CST

Como formatar corretamente a saída do shell sqlite?

  • 772

Se eu for mysql shelle digitar SELECT * FROM users, recebo -

+--------+----------------+---------------------------------+----------+-----------+--------------------+--------------------+
| USERID | NAME           | EMAILID                         | PASSWORD | USER_TYPE | CONTACT_ID_FKUSERS | COMPANY_ID_FKUSERS |
+--------+----------------+---------------------------------+----------+-----------+--------------------+--------------------+
|    137 | X              | [email protected]                        | #        | ADMIN     |                166 |                110 |
|    138 | Kshitiz        | [email protected]                 | asdf     | ADMIN     |                167 |                111 |
+--------+----------------+---------------------------------+----------+-----------+--------------------+--------------------+

Oracle sqlplusmostra -

USERID     NAME  EMAILID    PASSWORD   USER_TYPE  CONTACT_ID_FKUSERS COMPANY_ID_FKUSERS
---------- ----- ---------- ---------- ---------- ------------------ ------------------
137        X     [email protected]   #          ADMIN                     166                110
137        X     [email protected]   #          ADMIN                     166                110

Sqlite shellmostra -

137|X|[email protected]|#|ADMIN|166|110
138|Kshitiz|[email protected]|asdf|ADMIN|167|111
  1. Existe uma maneira de embelezar a saída de sqlite shell?
  2. Existe um shell alternativo que seja melhor que a distribuição padrão? (somente clientes CLI)
sqlite
  • 9 9 respostas
  • 91651 Views

9 respostas

  • Voted
  1. Best Answer
    Mat
    2013-04-24T01:39:37+08:002013-04-24T01:39:37+08:00

    Para saída "legível por humanos", você pode usar o columnmodo e ativar a saída do cabeçalho. Isso lhe dará algo semelhante à sqlplussaída em seus exemplos:

    sqlite> select * from foo;
    234|kshitiz|dba.se
    
    sqlite> .mode column
    sqlite> select * from foo;
    234         kshitiz     dba.se
    
    sqlite> .headers on
    sqlite> select * from foo;
    bar         baz         baf
    ----------  ----------  ----------
    234         kshitiz     dba.se
    
    • 178
  2. miken32
    2018-10-13T10:17:48+08:002018-10-13T10:17:48+08:00

    Todas as respostas fornecem configurações que você pode digitar no console SQLite ou via CLI, mas ninguém menciona que essas configurações podem ser colocadas em um arquivo RC para evitar ter que digitá-las o tempo todo. Salve isso como ~/.sqliterc:

    .mode column
    .headers on
    .separator ROW "\n"
    .nullvalue NULL
    

    Observe que também adicionei um espaço reservado para valores nulos, em vez da string vazia padrão.

    • 48
  3. jersey bean
    2016-08-09T15:49:30+08:002016-08-09T15:49:30+08:00

    Para aqueles que estão interessados ​​em obter os mesmos resultados, exceto executar o sqlite na linha de comando. Descobri que o seguinte não funciona:

    $ sqlite3 <dbfile> ".headers on;.mode column;select * from MyTable"
    Error: mode should be one of: ascii column csv html insert line list tabs tcl
    

    Em vez disso, você deve usar as opções -column e -header com o comando sqlite da seguinte forma:

    $ sqlite3 -column -header <dbfile> "select * from MyTable"
    

    Usando:

    $ sqlite3 --version 3.8.11.1 2015-07-29 20:00:57 cf538e2783e468bbc25e7cb2a9ee64d3e0e80b2f
    
    • 18
  4. Geoff_Clapp
    2019-05-08T13:13:47+08:002019-05-08T13:13:47+08:00

    eu sempre uso

    .mode line
    

    que imprime os resultados da consulta verticalmente, semelhante ao \Gmodificador do MySQL.

    • 13
  5. Cho-Lung
    2015-10-20T13:05:55+08:002015-10-20T13:05:55+08:00

    Como ainda não posso comentar... Além das ótimas respostas já fornecidas por Mat e mlissner, se em algum caso o conteúdo de uma coluna estiver truncado, após dar o formato correto ao shell sqlite (usando .mode columne .headers oncomo dito acima ), há também a possibilidade de usar .explainpara que seja mostrado todo o conteúdo de uma coluna.

    A única desvantagem desse comando é que os cabeçalhos das colunas encolhem, não sendo lidos corretamente e a saída pode ficar bastante confusa (em um cenário visual), então você pode usar .explain offpara retornar ao formato anterior e visualizá-lo com um formato mais "humano legível" formato mais uma vez.

    Essa abordagem pode ser usada em conjunto com comandos de formatadores de saída e como uma solução temporária para visualizar dados completos de um banco de dados/coluna, pois com o uso de .widthvocê sempre precisa fornecer o número preciso de caracteres para obter a saída completa de os dados de uma coluna.

    Para obter mais informações sobre como alterar os formatos de saída, uma referência rápida à documentação padrão da CLI:

    https://www.sqlite.org/cli.html

    • 1
  6. Kevin
    2019-08-18T09:06:36+08:002019-08-18T09:06:36+08:00

    Você pode usar .mode tabspor conveniência.

    sqlite> select * from user;
    name    age
    Bob     18
    Ali     19
    
    • 1
  7. superheron
    2017-11-13T09:32:21+08:002017-11-13T09:32:21+08:00

    O meu parecia uma bagunça sem quebras de linha. @Boxuan comentar sobre

    Você também pode adicionar .separator ROW "\n", para que as linhas sejam separadas por quebras de linha. O meu não era, e a saída era ilegível. – Boxuan 11 de maio às 15:08

    Corrigido meu problema com ele tambéminsira a descrição da imagem aqui

    • 0
  8. luis_js
    2020-05-11T20:50:51+08:002020-05-11T20:50:51+08:00

    Além de tudo o que já foi dito, você pode controlar a largura de suas colunas mostradas usando .width.

    Exemplo

    .width 8 0 3 9
    

    Em seguida, sua saída mostrará sua primeira coluna com uma largura de 8 caracteres, segunda coluna com ajuste automático (veja abaixo), terceira coluna com largura de 3 caracteres e a quarta terá uma largura de 9 caracteres.

    Alternativa para .width, use um nome de alias preenchido com espaços.

    A vantagem é que você está ajustando a largura rapidamente em sua consulta apenas para as colunas que exigem largura extra, enquanto o restante das colunas continua usando a largura de ajuste automático.

    Todas as colunas usarão a largura de ajuste automático, que é baseada na regra de largura da documentação do sqlite:

    Se você especificar uma largura de 0 para uma coluna, a largura da coluna será ajustada automaticamente para ter no máximo três números: 10, a largura do cabeçalho e a largura da primeira linha de dados. Isso torna a largura da coluna auto-ajustável. A configuração de largura padrão para cada coluna é esse valor 0 de ajuste automático.

    Digamos que sua tabela "minha_tabela" tenha as colunas "nome", "idade" e "endereço". E você está interessado em mostrar:

    1. "nome": primeiros 20 caracteres
    2. "idade": ajuste automático
    3. "endereço": primeiros 30 caracteres

    Sua consulta será:

    .mode columns
    .headers on
    
    CREATE TABLE my_table (name TEXT, age INTEGER, address TEXT);
    
    INSERT INTO my_table VALUES ("short name",
    22, "my house");
    
    INSERT INTO my_table VALUES ("my name is very long",
    22, "i live in my house somewhere in the planet Earth");
    
    SELECT name AS "name                ",
           age,
           address AS "address                       "
    FROM my_table;
    

    Sua saída:

    name                  age         address                       
    --------------------  ----------  ------------------------------
    short name            22          my house                      
    my name is very long  22          i live in my house somewhere i
    
    • 0
  9. e-ruiz
    2022-10-08T13:50:48+08:002022-10-08T13:50:48+08:00

    Observe que o SQLite3 tem várias .modeopções. Vamos dar uma olhada:

        sqlite> .version
        SQLite 3.34.1 2021-01-20
    
        sqlite> .help .mode 
        .import FILE TABLE       Import data from FILE into TABLE
           Options:
             --ascii               Use \037 and \036 as column and row separators
             --csv                 Use , and \n as column and row separators
             --skip N              Skip the first N rows of input
             -v                    "Verbose" - increase auxiliary output
           Notes:
             *  If TABLE does not exist, it is created.  The first row of input
                determines the column names.
             *  If neither --csv or --ascii are used, the input mode is derived
                from the ".mode" output mode
             *  If FILE begins with "|" then it is a command that generates the
                input text.
        .mode MODE ?TABLE?       Set output mode
           MODE is one of:
             ascii     Columns/rows delimited by 0x1F and 0x1E
             box       Tables using unicode box-drawing characters
             csv       Comma-separated values
             column    Output in columns.  (See .width)
             html      HTML <table> code
             insert    SQL insert statements for TABLE
             json      Results in a JSON array
             line      One value per line
             list      Values delimited by "|"
             markdown  Markdown table format
             quote     Escape answers as for SQL
             table     ASCII-art table
             tabs      Tab-separated values
             tcl       TCL list elements
    

    Para a pergunta original devemos olhar box, tablee claro column.

    Bem, columnprecisa de alguma ajuda .headers onpara mostrar os cabeçalhos, enquanto os modos boxe tablenão se importam, eles sempre mostram os cabeçalhos.

    Esses dois modos quebrarão o layout ao exibir dados com grandes comprimentos. E, novamente, boxe tablemodos não se importam .width(o que é uma pena).

    Quando precisamos lidar com grandes comprimentos no SQLite CLI, uma boa .modeé line. Dessa forma, cada coluna será exibida linha por linha e as instâncias serão separadas por uma linha em branco.

    Nota lateral: não tenho certeza, mas no momento da pergunta, .mode line não estava disponível no SQLite.

    Além disso (mas totalmente fora do tópico principal), bons modos para explorar, especialmente para exportação de dados, são: csv, jsone insertassim por diante.

    Então, confira sqlite> .help .modee faça suas próprias tentativas.

    ATUALIZAR:

    Também podemos limitar os tamanhos das colunas com um pequeno truque aplicando function substr():

    select 
      substr(my_column_with_lot_chars, 1, 30) as my_column_with_lot_chars, 
      other_column, 
      and_so_on 
    from my_table;
    

    Sempre verifique os documentos: https://www.sqlite.org/cli.html#dot_command_execution

    =)

    • 0

relate perguntas

  • Quantas buscas de disco são necessárias para gravar uma linha no SQLite?

  • Existe uma adição de software livre para SQLite disponível para replicação de dados? [fechado]

  • Usando CoreData em um aplicativo do lado do cliente

  • Limites do SQLite

  • É possível usar o SQLite como um banco de dados cliente-servidor? [fechado]

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Conceder acesso a todas as tabelas para um usuário

    • 5 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve