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

pyodbc调用cursor.columns时报bad argument type for built-in operation错误如何解决

cursor.columns调用报错原因及解决方案

核心原因

  • 低版本pyodbc对columns方法的关键字参数支持存在缺陷,仅传递table关键字参数时会触发参数类型校验异常
  • 部分数据库驱动要求columns方法必须同时传入表所属的目录(catalog)、模式(schema)参数,仅传表名无法匹配到对应表元数据
  • 特殊字符/编码不匹配:表名包含特殊字符、中文时,字符串编码与数据库连接编码不一致会触发类型错误

修复方案

  1. 优先升级pyodbc到最新稳定版,修复已知的参数解析bug
pip install --upgrade pyodbc
  1. 补充完整的元数据参数调用
    你已经可以正常调用cursor.tables获取表信息,可以直接复用返回的catalog、schema参数传入columns方法:
for table_info in cursor.tables(table='Customers'):
    # 读取表对应的目录、模式信息
    table_catalog = table_info.table_cat
    table_schema = table_info.table_schem
    # 传入完整参数查询列信息
    for col in cursor.columns(catalog=table_catalog, schema=table_schema, table='Customers'):
        print(col.column_name)
  1. 按位置传参适配旧版本
    如果因为环境限制无法升级pyodbc,可以跳过关键字参数,按方法原生的参数顺序(catalog、schema、table、column)传参,不需要的参数填空字符串占位即可:
# 前两位参数按需填空或传入实际catalog、schema值,第三位为表名
for row in cursor.columns('', '', 'Customers'):
    print(row.column_name)
  1. 编码适配
    如果表名包含中文/特殊字符,在初始化数据库连接时指定与数据库一致的编码,示例:
# 以SQL Server为例,指定UTF-8编码
conn = pyodbc.connect('你的连接字符串', charset='UTF-8')

内容的提问来源于stack exchange,提问作者Tim2673

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:45:03