You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:57:01