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

Python中如何将MySQL查询返回的ID用于另一个查询?

Python中如何将MySQL查询返回的ID用于另一个查询?

嗨,我来帮你理清楚这个问题~你遇到的错误其实很典型,咱们一步步解决:

首先,你得搞懂cursor.fetchall()返回的是什么——它返回的是由字典组成的列表,不是单个字典!所以你直接写questionslist['question_id']肯定会报错,因为列表只能用整数索引,不能用字符串当索引。

那正确的做法应该是先从这个列表里把所有的question_id提取出来,变成一个纯ID的列表,再用这个列表去做IN查询。

步骤1:修正第一个查询的小问题

先提一句,你第一个execute语句里的参数括号写错了,应该是这样(注意逗号,因为参数需要是元组):

qresult = cursor.execute('SELECT * FROM questions WHERE category_id=%s', (category_id,))
questionslist = cursor.fetchall()

步骤2:提取所有question_id

用列表推导式就能轻松把所有ID捞出来:

# 遍历questionslist里的每个字典,提取question_id
question_ids = [q['question_id'] for q in questionslist]

这样question_ids就是类似[1, 2]这样的纯ID列表了。

步骤3:构造并执行第二个IN查询

MySQL的IN子句需要对应数量的占位符,咱们可以动态生成这些占位符,既安全又灵活:

if not question_ids:
    # 防止没有查询到任何问题的情况,避免生成无效SQL
    choices_list = []
else:
    # 生成和ID数量一致的%s占位符,比如两个ID就是%s,%s
    placeholders = ','.join(['%s'] * len(question_ids))
    # 拼接SQL语句
    query = f'SELECT * FROM choices WHERE question_id IN ({placeholders})'
    # 执行查询,把question_ids作为参数传进去
    cresult = cursor.execute(query, question_ids)
    choices_list = cursor.fetchall()

为什么要这么做?

用动态生成占位符的方式,既避免了手动拼接字符串带来的SQL注入风险,又能完美匹配所有从第一个查询得到的question_id。

备注:内容来源于stack exchange,提问作者husain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 14:19:07