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

StackOverflow https://stackoverflow.com/questions/82875

  •  01-07-2019
  •  | 
  •  

Pergunta

O que o SQL pode ser usado para listar as tabelas e as linhas nessas tabelas em um arquivo de banco de dados SQLite - depois de anexar com o ATTACH Comando na ferramenta de linha de comando SQLITE 3?

Foi útil?

Solução

o .tables, e .schema As funções "auxiliares" não procuram bancos de dados anexados: eles apenas consultam o SQLITE_MASTER Tabela 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';

Observe que as tabelas temporárias não aparecem .tables Ou você tem que listar sqlite_temp_master por isso:

SELECT name FROM sqlite_temp_master WHERE type='table';

Outras dicas

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

  1. Liste as tabelas em seu banco de dados:

    .tables
    
  2. Liste a aparência da tabela:

    .schema tablename
    
  3. Imprima a tabela inteira:

    SELECT * FROM tablename;
    
  4. Liste todos os comandos de prompt SQLite disponíveis:

    .help
    

Parece que você precisa passar pelo sqlite_master Tabela assim:

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

E então passar manualmente por cada mesa com um SELECT ou semelhante para olhar para as linhas.

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

Para mostrar todas as tabelas, use

SELECT name FROM sqlite_master WHERE type = "table"

Para mostrar todas as linhas, acho que você pode iterar em todas as mesas e fazer uma seleção * em cada uma. Mas talvez um despejo seja o que você procura?

Usar .help Para verificar se há comandos disponíveis.

.table

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

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

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

Que se converte para o 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

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

SELECT name FROM sqlite_master
WHERE type='table';

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

Eu uso esta consulta para obtê -la:

SELECT name FROM sqlite_master WHERE type='table'

E usar no iOS:

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

De acordo com documentação, o equivalente a MySqls ' SHOW TABLES; é:

O comando ".tables" é semelhante ao modo de configuração da lista e depois executar 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 existir uma única tabela (ou para obter seus detalhes), consulte @Luizgeron responda.

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

.fullschema

Para ver todas as suas declarações de criação.

A maneira mais fácil de fazer isso é abrir o banco de dados diretamente e usar o .dump Comando, em vez de anexá -lo depois de invocar a ferramenta SQLITE 3 Shell.

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

sqlite3> ATTACH database.sqlite as "attached"

Na sua linha de comando do sistema operacional, abra o banco de dados diretamente:

$sqlite3 database.sqlite
sqlite3> .dump

Usar:

import sqlite3

TABLE_LIST_QUERY = "SELECT * FROM sqlite_master where type='table'"

Através 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'

Como ninguém mencionou sobre a referência oficial do SQLite, acho que pode ser útil se referir a ele 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 do mais, Se você estiver usando o Windows OS E não sei onde está o shell de comando, que está no site da SQLite:

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

Depois de baixá -lo, Clique no arquivo sqlite3.exe para inicializar o shell de comando sqlite. Quando é inicializado, por padrão, esta sessão SQLite está usando um banco de dados de memória, não um arquivo no disco e, portanto, todas as alterações serão perdidas quando a sessão sair. Para usar um arquivo de disco persistente como o banco de dados, digite o comando ".open ex1.db" imediatamente após o início da janela do terminal.

O exemplo acima causa o arquivo de banco de dados chamado "ex1.db" a ser aberto e usado e criado se ele não existir anteriormente. Você pode usar um nome de caminho completo para garantir que o arquivo esteja no diretório em que você acha que ele está. Use-se-slashes como o caractere do separador do 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 esse arquivo sqlite.exe para a mesma pasta com os outros arquivos Python. Dessa forma, o arquivo python grava e o shell sqlite lê dos arquivos .db estão no mesmo caminho.

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

sqlite> create table_a (id int, a int, b int);
sqlite> .schema table_a
CREATE TABLE table_a (id int, a int, b int);

.da para ver todos os bancos de dados - um chamado 'a Principal'

Tabelas deste banco de dados podem ser vistas por

Selecione TBL_NAME DISTINTO NO SQLITE_MASTER PERDEM por 1;

Os bancos de dados anexados precisam prefixos que você escolheu como na declaração Anexe, por exemplo aa (, BB, CC ...) Então:

Selecione Tbl_name distinto de aa.sqlite_master ordem por 1;

Observe que aqui você obtém as opiniões também. Para excluir isso adicionar onde tipo = 'tabela' antes de 'ordem'

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top