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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 03:40:03