2009-10-17 14 views
5

Podczas używania modułu sqlite3 w pythonie, wszystkie elementy parametru cursor.description z wyjątkiem nazw kolumn są ustawiane na None, więc tej krotki nie można użyć do znalezienia typów kolumn dla wyniku zapytania (w przeciwieństwie do innych DB - moduły zgodne z interfejsem API). Czy jest to jedyny sposób, aby typy kolumn używały pragma table_info(table_name).fetchall(), aby uzyskać opis tabeli, zapisać ją w pamięci, a następnie dopasować nazwy kolumn z parametru cursor.description do ogólnego opisu tabeli?sqlite3 i cursor.description

Odpowiedz

5

Nie, to nie jedyny sposób. Alternatywnie możesz także pobrać jeden wiersz, powtórzyć go i sprawdzić poszczególne kolumny obiektów i typów Pythona. O ile nie ma wartości None (w tym przypadku pole SQL ma wartość NULL), powinno to dać dość precyzyjne wskazanie, jaki był typ kolumny bazy danych.

Sqlite3 używa tylko sqlite3_column_decltype i sqlite3_column_type w jednym miejscu, każdy, i żadne nie są dostępne dla aplikacji Python - więc ich nie jest "bezpośrednim" sposobem, którego mógłbyś szukać.

1

nie próbowałem to w Pythonie, ale można spróbować czegoś jak

SELECT * 
FROM sqlite_master 
WHERE type = 'table'; 

który zawiera DDL CREATE używany do tworzenia tabeli. Parsując DDL można uzyskać informacje o typie kolumny, takie jakie jest. Pamiętaj, że SQLITE jest raczej niejasny i nieograniczony, jeśli chodzi o typy danych kolumn.