使用pypyodbc执行SQL插入时报参数类型TypeError如何解决
问题根因
报错是Python元组语法的常见坑导致的:你代码里写的record = (id_s)并不是元组类型。Python语法规定,单元素元组必须在元素后加尾随逗号,否则括号只会被识别为普通的运算优先级符号,(id_s)等价于直接写id_s,传入cursor.execute的参数不是要求的列表/元组/Row类型,就会触发对应报错。
你可以自行执行简单测试验证这个语法特性:
print(type((100))) # 输出 <class 'int'>,不是元组 print(type((100,))) # 输出 <class 'tuple'>,才是合法的元组
修复方案
二选一修改record的定义即可:
- 方案1:补全单元素元组的尾随逗号
record = (id_s,)
- 方案2:直接用列表传参,不需要考虑元组逗号的语法坑
record = [id_s]
修复后的完整可运行代码:
create_query = """INSERT INTO bcmdb.bcmdbuser.Groups (ParentGroupID, ChildGroupID, DirectChild) VALUES (100, ?, 0) """ record = (id_s,) cursor.execute(create_query, record) conn.commit()
内容的提问来源于stack exchange,提问作者heyurs
相关产品推荐
相关产品推荐

