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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:16:21