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

Python中cursor.fetchall()返回空列表:MySQL批量查询失败问题

批量查MySQL数据为空?问题出在这

为啥executemany查不到数据

executemany() 是给批量写操作(INSERT/UPDATE/DELETE)设计的,用来循环执行多条写SQL效率更高。但你拿它跑SELECT的话,坑就来了:它确实会循环执行每条查询,但cursor只会保留最后一次执行的结果。

比如你那四条id里,如果最后一条PK-YSG-23004在库中不存在,那fetchall()就返回空;就算最后一条存在,也只会返回那一条,不是四条的结果。这就是你批量查空、单条查得到的原因。

正确的批量查询姿势

用IN子句写单条SQL,一次性查所有目标id,这才是批量查询的正确方式:

import mysql.connector

mysql_config={
    'user' : 'root',
    'password' : '*********',
    'host' : '*******',
    'database' : 'aa_dev',
    'port' : 3306
}

# 整理要查的id列表,用IN子句构建SQL
target_ids = ['PK-YSG-23001', 'PK-YSG-23002', 'PK-YSG-23003', 'PK-YSG-23004']
# 生成对应数量的占位符,避免SQL注入
placeholders = ', '.join(['%s'] * len(target_ids))
sql = f"SELECT idfi, aircraft, file_location FROM flights_info WHERE idfi IN ({placeholders})"

mydb = mysql.connector.connect(**mysql_config)
mycursor = mydb.cursor()

mycursor.execute(sql, target_ids)
results = mycursor.fetchall()

# 记得关闭资源
mycursor.close()
mydb.close()

print(results)  # 现在能拿到所有匹配的记录了

额外提醒

  • 永远别用executemany()执行SELECT,效率低还容易踩结果集的坑。
  • 如果要查的id数量特别多(比如上万条),可以拆成多个小批次用IN查询,避免触发MySQL的max_allowed_packet限制。

内容的提问来源于stack exchange,提问作者Satria Muhammad Saglan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 06:07:36