Python预处理语句参数传递报错:int类型对象无len()方法
解决mysql-connector预处理语句传参时的TypeError问题
哈哈,这个坑我上周刚踩过!你遇到的这个TypeError: object of type int has no len(),根源是给mysql-connector的预处理语句传参时格式错了,咱们一步步理清楚:
问题原因
看报错里的代码行elif len(self._prepared[parameters]) != len(params):——这里的params被你传成了单个整数,而Python的int类型没有len()方法,直接调用就触发了报错。mysql-connector的execute()方法要求参数必须是可迭代类型(比如列表、元组),哪怕你只传一个参数也得包装起来。
错误示例(你大概率是这么写的)
import mysql.connector conn = mysql.connector.connect(host='localhost', user='root', password='xxx', database='test') cursor = conn.cursor(prepared=True) # 这里直接传了单个int值,会触发报错 cursor.execute("SELECT * FROM users WHERE id = %s", 123)
正确的传参方式
把单个参数放进元组或列表里就行,注意元组单个元素要加逗号(不然会被Python当成单个值,不是元组):
- 用元组(推荐写法):
cursor.execute("SELECT * FROM users WHERE id = %s", (123,))
- 用列表:
cursor.execute("SELECT * FROM users WHERE id = %s", [123])
如果是多个参数,就正常把所有值放进元组/列表:
cursor.execute("INSERT INTO users (name, age) VALUES (%s, %s)", ("Alice", 25))
内容的提问来源于stack exchange,提问作者Eyasu Tewodros
相关产品推荐
相关产品推荐

