在python中使用sqlite3模块时,除列名之外的cursor.description的所有元素都设置为None,因此该元组不能用于查找查询结果的列类型(与其他符合DB-API的模块不同) 。是获取列类型以使用pragma table_info(table_name).fetchall()
来获取表的描述,将其存储在内存中,然后将cursor.description中的列名与整个表描述匹配的唯一方法吗?
答案 0 :(得分:5)
不,这不是唯一的方法。或者,您也可以获取一行,迭代它,并检查各个列的Python对象和类型。除非值为None(在这种情况下SQL字段为NULL),否则这应该为您提供相当精确的指示数据库列类型的内容。
sqlite3只在一个地方使用sqlite3_column_decltype
和sqlite3_column_type
,每个地方都没有,并且Python应用程序都无法访问它们 - 因此它们不是您可能一直在寻找的“直接”方式。
答案 1 :(得分:1)
我没有在Python中尝试过这个,但你可以尝试像
这样的东西SELECT *
FROM sqlite_master
WHERE type = 'table';
,其中包含用于创建表的DDL CREATE语句。通过解析DDL,您可以获得列类型信息,例如它。请记住,当涉及列数据类型时,SQLITE相当模糊且不受限制。