使用pyodbc查询Informix表报ODBC SQL type -103不受支持错误如何解决
错误含义说明
报错中的ODBC SQL type -103 is not yet supported指pyodbc没有内置对应类型的转换器,无法识别Informix ODBC驱动返回的编号为-103的专有数据类型。报错提示的column-index=136表示不兼容的列是查询结果的第137列(索引从0开始计数),通常该列是Informix特有的扩展时间类型、大整数类型或者INTERVAL类型。
解决方案
- 方法一:SQL层面转换类型
不要使用SELECT *查询全表字段,明确列出需要的字段,可直接跳过该不兼容列。如果必须使用该列数据,可以在SQL中用内置函数将该列转为pyodbc支持的字符串类型:- 如果是时间类型,使用
TO_CHAR(目标列名, 'yyyy-mm-dd hh24:mi:ss')转换 - 如果是数值类型,使用
CAST(目标列名 AS VARCHAR(100))转换
调整后的SQL示例:
SELECT FIRST 5 列1,列2,TO_CHAR(不兼容列名) AS 列名 from bookingsd - 如果是时间类型,使用
- 方法二:pyodbc注册自定义类型转换器
在建立数据库连接后、执行查询前,给-103类型注册专属转换逻辑,示例代码如下:
# 自定义转换函数,可根据实际字段类型调整返回值类型 def convert_type_103(value): return str(value) if value is not None else None # 给-103类型注册转换器 conn.add_output_converter(-103, convert_type_103)
配置完成后再执行查询即可自动转换该类型的字段数据,不会再触发类型不支持报错。
- 方法三:更新依赖版本
将pyodbc升级到最新稳定版,同时升级本地的Informix ODBC驱动到官方最新版本,部分高版本依赖已经内置了对该类型的适配支持,可直接解决兼容问题。
内容的提问来源于stack exchange,提问作者J. Skinner
相关产品推荐
相关产品推荐

