Sugiro renomear a pergunta para algo não específico do python, já que a resposta é realmente universal para interfaces que usam SQL.
unode
2
É verdade, embora eu estivesse esperando uma API python ao solicitá-la. Vou tentar encontrar o nome certo.
noamtm
3
Se desejar mostrar tabelas no prompt de comando sqlite3, consulte stackoverflow.com/questions/82875/… . Se estiver usando o pacote Python sqlite3, consulte a resposta de Davoud Taghawi-Nejad aqui. Sugiro que o OP adicione Python novamente ao título da pergunta e selecione a resposta de Davoud. Encontrei esta página pesquisando no Google "show tables Python sqlite3", pois o Google conhece o antigo título da pergunta. As pesquisas no SO não chegariam aqui. Sem o ângulo Python, a pergunta duplicada vinculada 82875 recebeu muito mais conhecimento da multidão.
Bennett Brown
Respostas:
106
Você pode buscar a lista de tabelas e esquemas consultando a tabela SQLITE_MASTER:
sqlite>.tab
job snmptarget t1 t2 t3
sqlite>select name from sqlite_master where type ='table';
job
t1
t2
snmptarget
t3
sqlite>.schema job
CREATE TABLE job (
id INTEGER PRIMARY KEY,
data VARCHAR
);
sqlite>select sql from sqlite_master where type ='table'and name ='job';
CREATE TABLE job (
id INTEGER PRIMARY KEY,
data VARCHAR
)
@ jbuddy_13 sqlite>é o prompt do cliente da linha de comandos do sqlite. O objetivo do exemplo era demonstrar como se poderia consultar o banco de dados para listar tabelas e esquemas.
converter42
245
Em Python:
con = sqlite3.connect('database.db')
cursor = con.cursor()
cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")print(cursor.fetchall())
Cuidado com a minha outra resposta . Existe uma maneira muito mais rápida de usar pandas.
# Convert file existing_db.db to SQL dump file dump.sqlimport sqlite3, os
con = sqlite3.connect('existing_db.db')with open('dump.sql','w')as f:for line in con.iterdump():
f.write('%s\n'% line)
Eu recebi muitos erros no snippet que você escreveu e não vejo, por exemplo, "db_alias" nos documentos mencionados ou em outros exemplos. No contexto dos outros exemplos, acho que você deseja esta linha, por exemplo, a Jobtabela: meta = cursor.execute("PRAGMA table_info('Job')") E sua primeira linha parece não ter relação com o resto.
Nellmcb
4
Se alguém quiser fazer a mesma coisa com Pandas
import pandas as pd
import sqlite3
conn = sqlite3.connect("db.sqlite3")
table = pd.read_sql_query("SELECT name FROM sqlite_master WHERE type='table'", conn)print(table)
Você pode usar esse analisador de definição para analisar as definições como o código abaixo:
$parser =newSqliteTableDefinitionParser;
$parser->parseColumnDefinitions('x INTEGER PRIMARY KEY, y DOUBLE, z DATETIME default \'2011-11-10\', name VARCHAR(100)');
Respostas:
Você pode buscar a lista de tabelas e esquemas consultando a tabela SQLITE_MASTER:
fonte
sqlite> .schema job
sintaxe inválida em python ... o que estou perdendo?sqlite>
é o prompt do cliente da linha de comandos do sqlite. O objetivo do exemplo era demonstrar como se poderia consultar o banco de dados para listar tabelas e esquemas.Em Python:
Cuidado com a minha outra resposta . Existe uma maneira muito mais rápida de usar pandas.
fonte
cursor.close()
edb.close()
A maneira mais rápida de fazer isso em python é usando o Pandas (versão 0.16 ou superior).
Despejar uma tabela:
Despejar todas as tabelas:
fonte
cursor.close()
edb.close()
.with sqlite3.connect('database.db') as db:
Eu não estou familiarizado com a API Python, mas você sempre pode usar
fonte
Aqui está um programa python curto e simples para imprimir os nomes das tabelas e os nomes das colunas dessas tabelas (python 2. python 3 a seguir).
(EDIT: Eu tenho recebido votos periódicos sobre isso, então aqui está a versão python3 para as pessoas que estão encontrando esta resposta)
fonte
Aparentemente, a versão do sqlite3 incluída no Python 2.6 possui esta capacidade: http://docs.python.org/dev/library/sqlite3.html
fonte
Após muita discussão, encontrei uma resposta melhor nos documentos do sqlite para listar os metadados da tabela e até os bancos de dados anexados.
As informações principais são o prefixo table_info, não my_table com o nome do identificador de anexo.
fonte
Job
tabela:meta = cursor.execute("PRAGMA table_info('Job')")
E sua primeira linha parece não ter relação com o resto.Se alguém quiser fazer a mesma coisa com Pandas
fonte
Confira aqui para despejo. Parece que há uma função de despejo na biblioteca sqlite3.
fonte
fonte
Eu implementei um analisador de esquema de tabela sqlite no PHP, você pode verificar aqui: https://github.com/c9s/LazyRecord/blob/master/src/LazyRecord/TableParser/SqliteTableDefinitionParser.php
Você pode usar esse analisador de definição para analisar as definições como o código abaixo:
fonte