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

如何在同一个cursor.execute中执行多条SELECT SQL查询语句

同一个cursor.execute执行多条SELECT语句的解决方法

代码报错核心原因

  • 标准cursor.execute()方法仅接收1个SQL语句作为第一入参,第二个入参是参数化查询的变量列表,直接传入3条独立SQL属于传参格式错误
  • 第三条SQL存在语法错误:WHERE cccccc = = 437多写了一个等号
  • 即使拼接成单条SQL,默认配置下大部分数据库驱动也禁止单次执行多语句,避免SQL注入风险

最优解决方法(针对你的同结构查询场景)

你的三个SQL查询字段、表完全一致,仅过滤值不同,直接用IN条件合并为单条查询即可,性能最好也最安全:

def example(event=None):
    # 合并为单条查询,用参数化查询避免注入
    cursor.execute('SELECT aaaaaa From bbbbbb WHERE cccccc IN (%s, %s, %s)', (435, 436, 437))
    result=[row[0] for row in cursor]
    example['value'] = result
    example.current(0)
    return result

通用多语句执行方法(适用于不同结构的SELECT查询)

如果确实需要执行结构不同的多条SELECT,按以下两种方案操作:

方案1:循环执行单条语句(最安全,推荐)

def example(event=None):
    sql_list = [
        'SELECT aaaaaa From bbbbbb WHERE cccccc = %s',
        'SELECT aaaaaa From bbbbbb WHERE cccccc = %s',
        'SELECT aaaaaa From bbbbbb WHERE cccccc = %s'
    ]
    params = [435, 436, 437]
    result = []
    for sql, param in zip(sql_list, params):
        cursor.execute(sql, (param,))
        result.extend([row[0] for row in cursor])
    example['value'] = result
    example.current(0)
    return result

方案2:开启多语句执行权限(不推荐,存在注入风险)

仅当你完全确认SQL来源可控时使用,不同数据库驱动开启方式不同,以MySQL为例:

  1. 连接数据库时开启多语句支持:pymysql.connect(..., client_flag=pymysql.constants.CLIENT.MULTI_STATEMENTS)
  2. 拼接SQL后执行,遍历多个结果集:
def example(event=None):
    # 用分号拼接所有SQL
    multi_sql = '''
    SELECT aaaaaa From bbbbbb WHERE cccccc = 435;
    SELECT aaaaaa From bbbbbb WHERE cccccc = 436;
    SELECT aaaaaa From bbbbbb WHERE cccccc = 437
    '''
    cursor.execute(multi_sql)
    result = []
    # 遍历每个结果集
    while True:
        result.extend([row[0] for row in cursor])
        # 检查是否还有下一个结果集
        if not cursor.nextset():
            break
    example['value'] = result
    example.current(0)
    return result

内容的提问来源于stack exchange,提问作者William50694

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:06:04