使用cursor.fetchall()/fetchone()查询MySQL返回空结果的问题
问题诊断与解决方案
核心问题
你代码中误用了executemany()方法,这是导致查询无结果的根本原因。
原因说明
executemany()是用于批量执行同一SQL语句多次的方法,它要求第二个参数是包含多个参数组的序列(例如[(name1,), (name2,)])。你传入的[name]是单个元素的列表,不符合该方法的参数格式,导致SQL参数绑定失败,最终查询不到匹配结果。
修复代码
因为你是单条查询,应改用execute()方法,参数传入单个元组(注意末尾的逗号,确保被识别为元组而非单个值):
import mysql.connector from mysql.connector import Error # 需显式导入Error类 # ...create connection def get_id(name): cursor = connection.cursor() query = """SELECT id FROM table WHERE name = %s""" try: # 替换executemany为execute,参数使用(name,)格式 cursor.execute(query, (name,)) result = cursor.fetchone() # 单条结果用fetchone更高效 # 有结果返回id值,无结果返回None return result[0] if result else None except Error as err: print(f"The error '{err}' occurred") return None finally: cursor.close() # 及时关闭游标,避免资源泄漏
额外提示
- 确认
connection连接的数据库与MySQL Workbench中使用的是同一个实例。 - 如果需要批量查询多个name,才使用
executemany(),此时参数格式需正确:cursor.executemany(query, [('name_1',), ('name_2',)]) results = cursor.fetchall()
内容的提问来源于stack exchange,提问作者PolarBear
相关产品推荐
相关产品推荐

