HOWTO · SQLite

Obtener nombres de columnas en la base de datos SQLite

Aprenda a recuperar nombres de columnas y detalles relacionados en una base de datos SQLite.

En esta página

Para obtener los nombres de las columnas de una tabla en SQLite, ejecuta PRAGMA table_info(table_name) y lee el campo name de cada fila devuelta. Sustituye table_name por el nombre de la tabla. Python también puede acceder a esos metadatos mediante sqlite3. Para consultar únicamente los nombres con SQL, usa la función de valor de tabla pragma_table_info cuando esté disponible en el entorno SQLite que utilices.

Obtener nombres de columnas con PRAGMA table_info

PRAGMA table_info devuelve una fila por cada columna ordinaria. El campo name contiene el nombre de la columna; type, el tipo declarado; notnull indica si la columna tiene una restricción NOT NULL; dflt_value contiene su expresión predeterminada (o NULL si no tiene ninguna), y pk indica si forma parte de la clave principal. El campo cid indica la posición de la columna en la tabla, empezando por cero. Este resultado no es un inventario completo si la tabla tiene columnas generadas u ocultas: usa PRAGMA table_xinfo para incluirlas. Elige el pragma según necesites la definición ordinaria de la tabla o todas las columnas que SQLite informa.

Este ejemplo autónomo de Python crea una tabla pequeña en memoria, obtiene sus metadatos e imprime los nombres. El nombre de la tabla es un identificador SQL, así que se escribe directamente en la instrucción PRAGMA en lugar de pasarse como parámetro de valor. El ejemplo imprime los nombres de las columnas de la tabla creada.

import sqlite3

with sqlite3.connect(":memory:") as connection:
    connection.execute(
        "CREATE TABLE people (id INTEGER PRIMARY KEY, name TEXT NOT NULL, age INTEGER)"
    )
    rows = connection.execute("PRAGMA table_info(people)").fetchall()
    column_names = [row[1] for row in rows]
    print(column_names)
['id', 'name', 'age']

Usa este método cuando necesites tanto los nombres como los detalles de las columnas, o cuando quieras una opción disponible mediante la interfaz PRAGMA de SQLite. Si la tabla está en una base de datos adjunta, indica su esquema en la sintaxis del PRAGMA, por ejemplo: PRAGMA archive.table_info(people).

Consultar nombres de columnas con la función de valor de tabla pragma_table_info

Cuando el entorno SQLite disponga de esta función de valor de tabla, puedes consultar solo los nombres con SELECT name FROM pragma_table_info('people');. Esta consulta devuelve un nombre por fila, en lugar de todos los campos de metadatos. Para consultar una tabla de un esquema adjunto, pasa el nombre del esquema como segundo argumento de la función; por ejemplo: SELECT name FROM pragma_table_info('people', 'archive');.

La versión en Python usa la misma consulta SQL y lee el primer valor de cada fila del resultado. Este ejemplo independiente crea la misma tabla people, por lo que la consulta corresponde al ejemplo anterior. Comprueba si la función está disponible capturando el error operativo de SQLite; si no se produce ese error, imprime los nombres:

import sqlite3

with sqlite3.connect(":memory:") as connection:
    connection.execute(
        "CREATE TABLE people (id INTEGER PRIMARY KEY, name TEXT NOT NULL, age INTEGER)"
    )
    try:
        rows = connection.execute(
            "SELECT name FROM pragma_table_info('people')"
        ).fetchall()
    except sqlite3.OperationalError as error:
        print(f"pragma_table_info is unavailable: {error}")
    else:
        print([row[0] for row in rows])

La disponibilidad depende del entorno SQLite que utilices. Si la función no está disponible, usa PRAGMA table_info. La función resulta útil cuando quieres combinar los metadatos de las columnas con otros filtros o combinaciones SQL.

Obtener nombres de columnas en la consola de línea de comandos de SQLite

En la consola de línea de comandos de SQLite, abre la base de datos con sqlite3 path/to/database.db y luego escribe PRAGMA table_info(people);. Lee la columna name del resultado para obtener los nombres de las columnas; los demás campos contienen los metadatos descritos antes. Para mostrar los resultados con más claridad, escribe primero .headers on y .mode column. Estos comandos con punto cambian la presentación de los resultados en la consola; son ajustes de la consola, no instrucciones SQL, y no obtienen los metadatos por sí mismos.