HOWTO · SQLite
SQLite Describir una Tabla
Este artículo explica cómo inspeccionar una tabla de SQLite con `.schema`, PRAGMA o una consulta a `sqlite_schema`.
En esta página
SQLite no incluye un comando DESCRIBE. Para inspeccionar una tabla, usa el comando .schema en el shell de línea de comandos de SQLite para consultar su instrucción CREATE TABLE, PRAGMA table_info para ver los metadatos de las columnas o una consulta a sqlite_schema para recuperar la definición almacenada. Estos métodos responden preguntas relacionadas, pero distintas: el texto del esquema muestra cómo se definió la tabla, mientras que PRAGMA devuelve una fila por columna.
Cómo describir una tabla en SQLite
Elige el método según la información que necesites. Usa .schema para consultar la definición SQL, PRAGMA table_info para obtener una lista estructurada de las columnas y sus propiedades, y sqlite_schema si necesitas buscar una definición mediante SQL. El comando .tables del shell de línea de comandos de SQLite puede ayudarte a comprobar primero el nombre exacto de la tabla.
Usar .schema en el shell de línea de comandos de SQLite
.schema es un comando propio del shell de línea de comandos de SQLite; no es SQL y no se puede enviar como una instrucción SQL mediante una biblioteca de bases de datos. Para mostrar la definición de una tabla, escribe .schema employee. El shell imprime la instrucción CREATE TABLE correspondiente, incluidas las columnas declaradas y las restricciones. Para enumerar las tablas disponibles, escribe .tables. Para mostrar el esquema con sangría, usa .schema --indent.
Si .schema employee no muestra nada, no concluyas solo por eso que la tabla no existe. Comprueba la ortografía y las mayúsculas y minúsculas con .tables, y confirma que el shell esté conectado al archivo de base de datos que querías abrir. También puedes consultar sqlite_schema, como se muestra más adelante. Una búsqueda sin resultados puede deberse a que el nombre no coincide o a que estás inspeccionando otra base de datos.
Usar PRAGMA table_info y PRAGMA table_xinfo
Ejecuta PRAGMA table_info(employee); para obtener una fila por cada columna ordinaria de la tabla. El resultado incluye la posición de la columna (cid), su nombre, el tipo declarado, si es obligatoria (notnull), su valor predeterminado (dflt_value) y si forma parte de una clave principal (pk). Son metadatos estructurados, no el texto original de CREATE TABLE; no muestran todas las restricciones de la tabla de la misma forma que .schema.
Usa PRAGMA table_xinfo(employee); si también necesitas inspeccionar columnas ocultas o generadas, y solo si la compilación de SQLite que utilizas lo admite. Devuelve las columnas de table_info y un campo hidden que indica el estado de cada columna. Si tu compilación no admite el comando, usa table_info para consultar las columnas que devuelve o revisa la documentación de esa compilación. Aquí no se presupone ningún límite de versión concreto de SQLite.
Consultar sqlite_schema para obtener la definición de una tabla
sqlite_schema almacena entradas del esquema para tablas, índices, vistas y desencadenadores. Para recuperar mediante SQL la definición de una tabla, filtra por su nombre y por el tipo de objeto:
La consulta es SELECT sql FROM sqlite_schema WHERE type = 'table' AND name = 'employee';.
La columna sql contiene el texto SQL usado para definir el objeto, o NULL en el caso de algunos índices internos. El nombre anterior sqlite_master es un alias de sqlite_schema; no es un comando al que se le pase el nombre de una tabla. No modifiques directamente las tablas del catálogo del esquema. SQLite las mantiene cuando cambian los objetos de la base de datos, y editarlas directamente puede dañarla.
Ejemplo: inspeccionar una tabla de empleados
Este ejemplo en Python crea una pequeña base de datos en memoria e inspecciona la tabla employee. Utiliza la API DB-API de SQLite, por lo que funciona sin comandos propios del shell y mantiene la base de datos autocontenida.
Ejecuta este ejemplo:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
import sqlite3
connection = sqlite3.connect(":memory:")
connection.execute(
"CREATE TABLE employee ("
"id INTEGER PRIMARY KEY, "
"name TEXT NOT NULL, "
"dept TEXT NOT NULL, "
"salary TEXT NOT NULL)"
)
columns = connection.execute("PRAGMA table_info(employee)").fetchall()
for column in columns:
print(column[1], column[2], "primary key=" + str(bool(column[5])))
definition = connection.execute(
"SELECT sql FROM sqlite_schema WHERE type = ? AND name = ?",
("table", "employee"),
).fetchone()[0]
print(definition)
connection.close()
Las filas de PRAGMA identifican cada columna e indican que id es la clave principal. La consulta al catálogo devuelve el texto CREATE TABLE de la tabla. En una sesión del shell, .schema employee es una forma práctica de mostrar esa definición; usa PRAGMA cuando necesites procesar mediante programación las propiedades de las columnas.