sqlite3 和 cursor.description
在使用Python的sqlite3模块时,cursor.description中的所有元素除了列名之外,其他的都被设置为None。所以这个元组不能用来查找查询结果的列类型(和其他符合DB-API标准的模块不一样)。获取列类型的唯一方法是使用pragma table_info(table_name).fetchall()
来获取表的描述,先把它存到内存中,然后再把cursor.description中的列名和这个表的整体描述进行匹配吗?
2 个回答
2
我还没在Python里试过这个,不过你可以试试类似下面的代码:
SELECT *
FROM sqlite_master
WHERE type = 'table';
这段代码里包含了用来创建表的DDL CREATE语句。通过解析这个DDL,你可以获取到列的类型信息,比如说是什么类型的。要记住,SQLite在列的数据类型方面比较模糊和不严格。
5
不,这并不是唯一的方法。你还可以取出一行数据,然后逐个查看里面的每一列,检查这些列在Python中的对象和类型。只要这个值不是None(也就是SQL字段是NULL),你就能比较准确地知道数据库中这一列的类型是什么。
sqlite3只在一个地方使用了sqlite3_column_decltype
和sqlite3_column_type
这两个函数,而且它们对Python程序是不可访问的,所以你可能想要的那种“直接”方式是不存在的。