Python sqlite3如何不获取数据得到SELECT查询返回行的字段类型
核心原因
Python 内置的 sqlite3 模块没有完全遵循 PEP-0249 规范,cursor.description 固定返回 type_code 为 None,这是官方明确的实现特性,所以直接读取游标描述拿不到字段类型。
解决方案
方案1:轻量读取单行数据(实现最简单)
仅需要读取查询结果的第一行即可判断类型,不需要遍历全量数据,开销极低,适合绝大多数场景:
import sqlite3 conn = sqlite3.connect(':memory:') cursor = conn.cursor() cursor.execute('SELECT 1, "text"') # 仅拉取第一行,不会加载全量结果 first_row = cursor.fetchone() # 按顺序获取所有列的对应Python类型 col_types = [type(col) for col in first_row] print(col_types) # 输出:[<class 'int'>, <class 'str'>]
方案2:完全无需读取查询结果(符合无数据读取要求)
通过创建临时视图+查询SQLite系统表的方式实现,全程不会读取原查询的任何业务数据:
import sqlite3 conn = sqlite3.connect(':memory:') cursor = conn.cursor() # 将目标查询封装为临时视图 query = 'SELECT 1, "text"' cursor.execute(f'CREATE TEMP VIEW temp_query_res AS {query}') # 读取视图的元信息获取字段类型 cursor.execute('PRAGMA table_info(temp_query_res)') col_meta = cursor.fetchall() for col in col_meta: print(f"列序号:{col[0]},列名:{col[1]},字段类型:{col[2]}") # 输出: # 列序号:0,列名:1,字段类型:INTEGER # 列序号:1,列名:"text",字段类型:TEXT # 用完删除临时视图即可 cursor.execute('DROP VIEW temp_query_res')
内容的提问来源于stack exchange,提问作者rho
相关产品推荐
相关产品推荐

