2009-10-17 30 views
5

Al utilizar el módulo sqlite3 en python, todos los elementos de cursor.description excepto los nombres de columna se configuran en Ninguno, por lo que esta tupla no se puede usar para encontrar los tipos de columna para un resultado de consulta (a diferencia de otros DB -los módulos compatibles con API). ¿Es la única forma de obtener los tipos de columnas para usar pragma table_info(table_name).fetchall() para obtener una descripción de la tabla, almacenarla en la memoria y luego hacer coincidir los nombres de las columnas de cursor.description con esa descripción general de la tabla?sqlite3 y cursor.description

Respuesta

5

No, no es la única manera. Alternativamente, también puede buscar una fila, iterar sobre ella e inspeccionar la columna individual de objetos y tipos de Python. A menos que el valor sea Ninguno (en cuyo caso el campo SQL es NULO), esto debería proporcionarle una indicación bastante precisa del tipo de columna de la base de datos.

sqlite3 solo usa sqlite3_column_decltype y sqlite3_column_type en un solo lugar, cada uno, y ninguno de los dos está accesible para la aplicación Python, por lo que no es una forma "directa" que pueda haber estado buscando.

1

No he probado esto en Python, pero se puede intentar algo así como

SELECT * 
FROM sqlite_master 
WHERE type = 'table'; 

que contiene el DDL declaración utilizado para crear la tabla a crear. Al analizar el DDL, puede obtener la información del tipo de columna, tal como está. Recuerde que SQLITE es bastante vago y no restrictivo cuando se trata de tipos de datos de columna.