HOWTO · SQLite
Spaltennamen in der SQLite-Datenbank abrufen
Erfahren Sie, wie Sie Spaltennamen und zugehörige Details in einer SQLite-Datenbank abrufen.
Auf dieser Seite
Um die Spaltennamen einer SQLite-Tabelle abzurufen, führen Sie PRAGMA table_info(table_name) aus und lesen das Feld name aus jeder zurückgegebenen Zeile. Ersetzen Sie table_name durch den Tabellennamen. Dieselben Metadaten sind in Python über sqlite3 verfügbar. Für eine reine Namensabfrage per SQL verwenden Sie die tabellenwertige Funktion pragma_table_info, sofern Ihre SQLite-Laufzeitumgebung sie bereitstellt.
Spaltennamen mit PRAGMA table_info abrufen
PRAGMA table_info liefert für jede gewöhnliche Spalte eine Zeile. Das Feld name enthält den Spaltennamen, type den deklarierten Typ, notnull gibt an, ob für die Spalte eine NOT-NULL-Beschränkung gilt, dflt_value enthält den Standardausdruck oder NULL, wenn keiner vorhanden ist, und pk zeigt an, ob die Spalte Teil eines Primärschlüssels ist. Das Feld cid gibt die Position der Spalte in der Tabelle an und beginnt bei null. Bei Tabellen mit generierten oder verborgenen Spalten ist dieses Ergebnis nicht vollständig: Verwenden Sie PRAGMA table_xinfo, um diese Spalten ebenfalls einzubeziehen. Wählen Sie das Pragma danach aus, ob Sie die gewöhnliche Tabellendefinition oder alle von SQLite gemeldeten Spalten benötigen.
Dieses eigenständige Python-Beispiel erstellt eine kleine Tabelle im Arbeitsspeicher, ruft die Metadaten ab und gibt die Namen aus. Der Tabellenname ist ein SQL-Bezeichner. Daher wird er direkt in der PRAGMA-Anweisung angegeben und nicht als Wertparameter übergeben. Ausgegeben werden die Spaltennamen der Beispieltabelle. Die unveränderten Code- und Ausgabeblöcke bleiben bytegleich; darin enthaltene Bezeichnungen bleiben daher auf Englisch.
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']
Verwenden Sie diesen Ansatz, wenn Sie sowohl die Namen als auch die Spaltendetails benötigen oder eine Methode über die PRAGMA-Schnittstelle von SQLite nutzen möchten. Befindet sich die Tabelle in einer eingebundenen Datenbank, geben Sie deren Schema in der PRAGMA-Form an, zum Beispiel mit PRAGMA archive.table_info(people).
Spaltennamen mit der tabellenwertigen Funktion pragma_table_info abfragen
Wenn die SQLite-Laufzeitumgebung diese tabellenwertige Funktion bereitstellt, können Sie mit SELECT name FROM pragma_table_info('people'); nur die Namen abfragen. Die Abfrage gibt einen Namen pro Zeile statt sämtlicher Metadatenfelder zurück. Um eine Tabelle in einem eingebundenen Schema zu untersuchen, übergeben Sie dessen Namen als zweites Funktionsargument, zum Beispiel mit SELECT name FROM pragma_table_info('people', 'archive');.
Die Python-Variante verwendet dieselbe SQL-Abfrage und liest den ersten Wert jeder Ergebniszeile aus. Dieses eigenständige Beispiel erstellt dieselbe Tabelle people, sodass die Abfrage zum vorherigen Beispiel passt. Es prüft die Verfügbarkeit, indem es einen SQLite-OperationalError abfängt; andernfalls gibt es die Namen aus:
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])
Die Verfügbarkeit hängt von der verwendeten SQLite-Laufzeitumgebung ab. Ist die Funktion nicht verfügbar, verwenden Sie stattdessen PRAGMA table_info. Die Funktionsform eignet sich, wenn Sie Spaltenmetadaten mit anderen SQL-Filtern oder Joins kombinieren möchten.
Spaltennamen in der SQLite-Kommandozeile abrufen
Öffnen Sie die Datenbank in der SQLite-Kommandozeile mit sqlite3 path/to/database.db und geben Sie anschließend PRAGMA table_info(people); ein. Anhand der Spalte name im Ergebnis finden Sie die Spaltennamen; die übrigen Felder enthalten die oben beschriebenen Metadaten. Für eine übersichtlichere Darstellung geben Sie zuerst .headers on und .mode column ein. Diese Punktbefehle ändern die Anzeige der Abfrageergebnisse in der Shell. Sie sind Shell-Einstellungen, kein SQL, und rufen die Metadaten nicht selbst ab.