it-swarm-pt.tech

Como listar as tabelas em um arquivo de banco de dados SQLite que foi aberto com o ATTACH?

Qual SQL pode ser usado para listar as tabelas e as linhas dentro dessas tabelas em um arquivo de banco de dados SQLite - depois de anexá-lo ao comando ATTACH na ferramenta de linha de comando do SQLite 3?

1113
izb

As funções .tables e .schema "helper" não são examinadas nos bancos de dados ATTACH: eles apenas consultam a tabela SQLITE_MASTER para o banco de dados "principal". Consequentemente, se você usou

ATTACH some_file.db AS my_db;

então você precisa fazer

SELECT name FROM my_db.sqlite_master WHERE type='table';

Note que tabelas temporárias não aparecem com .tables: você tem que listar sqlite_temp_master para isso:

SELECT name FROM sqlite_temp_master WHERE type='table';
524
Anthony Williams

Existem algumas etapas para ver as tabelas em um banco de dados SQLite:

  1. Listar as tabelas em seu banco de dados:

    .tables
    
  2. Listar como a tabela se parece:

    .schema tablename
    
  3. Imprima a tabela inteira:

    SELECT * FROM tablename;
    
  4. Listar todos os comandos do Prompt SQLite disponíveis:

    .help
    
1233
Mark Janssen

Parece que você precisa passar pelo sqlite_master table, assim:

SELECT * FROM dbname.sqlite_master WHERE type='table';

E, em seguida, percorrer manualmente cada tabela com uma SELECT ou similar para ver as linhas.

Os comandos .DUMP e .SCHEMA não parecem ver o banco de dados.

433
Lasse Vågsæther Karlsen

Para mostrar todas as tabelas, use

SELECT name FROM sqlite_master WHERE type = "table"

Para mostrar todas as linhas, acho que você pode percorrer todas as tabelas e fazer um SELECT * em cada uma delas. Mas talvez um DUMP seja o que você procura?

153
Christian Davén

Use .help para verificar os comandos disponíveis.

.table

Este comando mostraria todas as tabelas sob seu banco de dados atual.

68
Antony.H

Existe um comando disponível para isso na linha de comando do SQLite:

.tables ?PATTERN?      List names of tables matching a LIKE pattern

Que converte no seguinte SQL:

SELECT name FROM sqlite_master
WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'
UNION ALL
SELECT name FROM sqlite_temp_master
WHERE type IN ('table','view')
ORDER BY 1
40
flubba

Para listar as tabelas, você também pode fazer:

SELECT name FROM sqlite_master
WHERE type='table';
36
Rafał Dowgird

Tente PRAGMA table_info(table-name);
http://www.sqlite.org/pragma.html#schema

29
Luiz Geron

Eu uso essa consulta para obtê-lo:

SELECT name FROM sqlite_master WHERE type='table'

E para usar no iOS:

NSString *aStrQuery=[NSString stringWithFormat:@"SELECT name FROM sqlite_master WHERE type='table'"];
19
GameLoading

De acordo com a documentation , o equivalente do SHOW TABLES; dos MySQLs é:

O comando ".tables" é semelhante ao modo de lista de configurações e executa a seguinte consulta:

SELECT name FROM sqlite_master
  WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'
UNION ALL
SELECT name FROM sqlite_temp_master
  WHERE type IN ('table','view')
ORDER BY 1;

No entanto, se você estiver verificando se existe uma única tabela (ou para obter seus detalhes), consulte @LuizGeron answer.

15
Alix Axel

A partir das versões mais recentes do SQLite 3, você pode emitir:

.fullschema

para ver todas as suas instruções de criação.

15
pepper

A maneira mais fácil de fazer isso é abrir o banco de dados diretamente e usar o comando .dump, em vez de anexá-lo após chamar a ferramenta SQLite 3 Shell.

Então ... (suponha que sua linha de comando do sistema operacional seja $) em vez de $sqlite3:

sqlite3> ATTACH database.sqlite as "attached"

Na linha de comandos do SO, abra o banco de dados diretamente:

$sqlite3 database.sqlite
sqlite3> .dump
11
Noah

Por meio de um union all, combine todas as tabelas em uma lista.

select name
from sqlite_master 
where type='table'

union all 

select name 
from sqlite_temp_master 
where type='table'
9
openwonk

Usar:

import sqlite3

TABLE_LIST_QUERY = "SELECT * FROM sqlite_master where type='table'"
9
Mrityunjay Singh

Como ninguém mencionou a referência oficial do SQLite, acho que pode ser útil referenciá-lo sob este título:

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

Você pode manipular seu banco de dados usando os comandos descritos neste link. Além disso, se você estiver usando o sistema operacional Windows e não sabe onde está o comando Shell, que está no site do SQLite:

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

Após baixá-lo, clique no arquivo sqlite3.exe para inicializar o comando SQLite Shell . Quando é inicializado, por padrão, esta sessão SQLite está usando um banco de dados na memória, não um arquivo no disco, e assim todas as alterações serão perdidas quando a sessão for encerrada. Para usar um arquivo de disco permanente como o banco de dados, insira o comando ".open ex1.db" imediatamente após a inicialização da janela do terminal.

O exemplo acima faz com que o arquivo de banco de dados chamado "ex1.db" seja aberto e usado, e criado se não existir anteriormente. Você pode querer usar um nome de caminho completo para garantir que o arquivo esteja no diretório em que você acredita. Use barras de avanço como o caractere separador de diretório. Em outras palavras, use "c: /work/ex1.db", não "c:\work\ex1.db".

Para ver todas as tabelas no banco de dados que você escolheu anteriormente, digite o comando .tables como é dito no link acima.

Se você trabalha no Windows, acho que pode ser útil mover este arquivo sqlite.exe para a mesma pasta com os outros arquivos Python. Desta forma, o arquivo Python grava e as leituras do Shell SQLite dos arquivos .db estão no mesmo caminho.

7
oiyio

O comando ".schema" listará as tabelas disponíveis e suas linhas, mostrando a instrução usada para criar as tabelas:

 sqlite> create table_a (id int, int, b int); 
 sqlite> .schema tabela_a 
 CREATE TABLE tabela_a (id int, int, b int); ____.]
5
trf

.da para ver todas as bases de dados - uma chamada ' main '

tabelas deste banco de dados pode ser visto por

SELECT nome_tabela distinta da ordem sqlite_master por 1;

Os bancos de dados anexados precisam de prefixos que você escolheu com AS na instrução ATTACH, por exemplo. aa (, bb, cc ...) assim:

SELECT nome_tabela distinta de aa.sqlite_master order por 1;

Observe que aqui você obtém as visualizações também. Para excluir estes, adicione onde type = 'table' before 'order'

1
Klaas-Z4us-V