Sugiero cambiar el nombre de la pregunta a algo que no sea específico de Python, ya que la respuesta es realmente universal para las interfaces que usan SQL.
Unode
2
Es cierto, aunque esperaba una API de Python cuando la preguntaba. Trataré de encontrar el nombre correcto.
noamtm
3
Si desea mostrar tablas desde el símbolo del sistema sqlite3, consulte stackoverflow.com/questions/82875/… . Si usa el paquete Python sqlite3, vea la respuesta de Davoud Taghawi-Nejad aquí. Sugiero que el OP agregue Python nuevamente en el título de la pregunta y seleccione la respuesta de Davoud. Encontré esta página buscando en Google "show tables Python sqlite3" ya que Google conoce el antiguo título de la pregunta. Las búsquedas dentro de SO no podrían aterrizar aquí. Sin el ángulo de Python, la pregunta duplicada vinculada 82875 ha recibido mucha más sabiduría de la multitud.
Bennett Brown, el
Respuestas:
106
Puede obtener la lista de tablas y esquemas consultando la tabla 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>es el indicador de cliente de línea de comando sqlite. El propósito del ejemplo era demostrar cómo se podía consultar la base de datos para enumerar tablas y esquemas.
convertidor42
245
En Python:
con = sqlite3.connect('database.db')
cursor = con.cursor()
cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")print(cursor.fetchall())
Cuidado con mi otra respuesta . Hay una forma mucho más rápida de usar pandas.
Aquí hay un programa de Python corto y simple para imprimir los nombres de las tablas y los nombres de las columnas para esas tablas (python 2. sigue python 3).
import sqlite3
db_filename ='database.sqlite'
newline_indent ='\n '
db=sqlite3.connect(db_filename)
db.text_factory = str
cur = db.cursor()
result = cur.execute("SELECT name FROM sqlite_master WHERE type='table';").fetchall()
table_names = sorted(zip(*result)[0])print"\ntables are:"+newline_indent+newline_indent.join(table_names)for table_name in table_names:
result = cur.execute("PRAGMA table_info('%s')"% table_name).fetchall()
column_names = zip(*result)[1]print("\ncolumn names for %s:"% table_name)+newline_indent+(newline_indent.join(column_names))
db.close()print"\nexiting."
(EDITAR: He estado recibiendo votaciones periódicas sobre esto, así que aquí está la versión de python3 para las personas que están encontrando esta respuesta)
import sqlite3
db_filename ='database.sqlite'
newline_indent ='\n '
db=sqlite3.connect(db_filename)
db.text_factory = str
cur = db.cursor()
result = cur.execute("SELECT name FROM sqlite_master WHERE type='table';").fetchall()
table_names = sorted(list(zip(*result))[0])print("\ntables are:"+newline_indent+newline_indent.join(table_names))for table_name in table_names:
result = cur.execute("PRAGMA table_info('%s')"% table_name).fetchall()
column_names = list(zip(*result))[1]print(("\ncolumn names for %s:"% table_name)+newline_indent
+(newline_indent.join(column_names)))
db.close()print("\nexiting.")
# 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)
Recibí muchos errores en el fragmento que escribiste y no veo, por ejemplo, "db_alias" en los documentos a los que se hace referencia ni en otros ejemplos. En el contexto de los otros ejemplos, creo que desea esta línea, por ejemplo, la Jobtabla: meta = cursor.execute("PRAGMA table_info('Job')") Y su primera línea parece no estar relacionada con el resto.
nealmcb
4
Si alguien quiere hacer lo mismo con los 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)
Puede usar este analizador de definiciones para analizar las definiciones como el código a continuación:
$parser =newSqliteTableDefinitionParser;
$parser->parseColumnDefinitions('x INTEGER PRIMARY KEY, y DOUBLE, z DATETIME default \'2011-11-10\', name VARCHAR(100)');
Respuestas:
Puede obtener la lista de tablas y esquemas consultando la tabla SQLITE_MASTER:
fuente
sqlite> .schema job
sintaxis no válida en python ... ¿qué me estoy perdiendo?sqlite>
es el indicador de cliente de línea de comando sqlite. El propósito del ejemplo era demostrar cómo se podía consultar la base de datos para enumerar tablas y esquemas.En Python:
Cuidado con mi otra respuesta . Hay una forma mucho más rápida de usar pandas.
fuente
cursor.close()
ydb.close()
La forma MÁS RÁPIDA de hacer esto en Python es utilizando Pandas (versión 0.16 y posteriores).
Volcar una mesa:
Volcar todas las tablas:
fuente
cursor.close()
ydb.close()
.with sqlite3.connect('database.db') as db:
No estoy familiarizado con la API de Python, pero siempre puedes usar
fuente
Aquí hay un programa de Python corto y simple para imprimir los nombres de las tablas y los nombres de las columnas para esas tablas (python 2. sigue python 3).
(EDITAR: He estado recibiendo votaciones periódicas sobre esto, así que aquí está la versión de python3 para las personas que están encontrando esta respuesta)
fuente
Aparentemente, la versión de sqlite3 incluida en Python 2.6 tiene esta capacidad: http://docs.python.org/dev/library/sqlite3.html
fuente
Después de mucho juguetear, encontré una mejor respuesta en sqlite docs para enumerar los metadatos de la tabla, incluso las bases de datos adjuntas.
La información clave es prefijar table_info, no my_table con el nombre del identificador de archivo adjunto.
fuente
Job
tabla:meta = cursor.execute("PRAGMA table_info('Job')")
Y su primera línea parece no estar relacionada con el resto.Si alguien quiere hacer lo mismo con los pandas
fuente
Echa un vistazo aquí para el volcado. Parece que hay una función de volcado en la biblioteca sqlite3.
fuente
fuente
He implementado un analizador de esquema de tabla sqlite en PHP, puede consultar aquí: https://github.com/c9s/LazyRecord/blob/master/src/LazyRecord/TableParser/SqliteTableDefinitionParser.php
Puede usar este analizador de definiciones para analizar las definiciones como el código a continuación:
fuente