2009-10-17 4 views
5

Wenn das sqlite3-Modul in Python verwendet wird, werden alle Elemente von cursor.description außer den Spaltennamen auf None gesetzt. Daher kann dieses Tupel nicht zur Suche nach Spaltentypen für ein Abfrageergebnis verwendet werden -API-konforme Module). Ist die einzige Möglichkeit, die Typen der Spalten zu verwenden, zu verwenden, um eine Beschreibung der Tabelle abzurufen, sie in Arbeitsspeicher zu speichern, und die Spalte-Namen von cursor.description dann mit der gesamten Tabellenbeschreibung übereinstimmen?sqlite3 und cursor.description

Antwort

5

Nein, es ist nicht die einzige Möglichkeit. Alternativ können Sie auch eine Zeile abrufen, darüber iterieren und die einzelnen Python-Objekte und -Typen der einzelnen Spalten überprüfen. Wenn der Wert None ist (in diesem Fall ist das SQL-Feld NULL), sollte dies eine ziemlich genaue Angabe darüber geben, was der Typ der Datenbankspalte ist.

sqlite3 verwendet nur sqlite3_column_decltype und sqlite3_column_type an einem Ort, und beide sind für die Python-Anwendung nicht zugänglich - also ist es kein "direkter" Weg, den Sie vielleicht gesucht haben.

1

Ich habe das nicht in Python versucht, aber man könnte so etwas wie

SELECT * 
FROM sqlite_master 
WHERE type = 'table'; 

versuchen, die die DDL die Tabelle erstellen verwendet CREATE-Anweisung enthält. Durch das Analysieren der DDL können Sie die Spaltentypinformationen erhalten, so wie sie sind. Beachten Sie, dass SQLITE bei Spaltendatentypen ziemlich vage und nicht einschränkend ist.