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

再次创建MySQL游标连接时出现错误,寻求技术解决方案

解决创建第二个数据库游标时的错误问题

先梳理下你的代码里可能存在的问题,以及对应的修复方案:

1. 先排查连接状态与异常捕获

你用全局的conn对象创建第二个游标时出错,大概率是连接意外断开,或者没有捕获游标创建/执行时的异常。建议先检查连接状态,并添加异常捕获来定位具体错误:

import mysql.connector
from mysql.connector import Error

# 确保连接处于活跃状态
try:
    if not conn.is_connected():
        conn.reconnect()  # 连接断开时重新连接
    cursor_two = conn.cursor()
    cursor_two.execute("select type from questions")
    data_two = cursor_two.fetchall()
except Error as e:
    print(f"创建游标或执行查询时出错: {e}")

2. 修复SQL注入风险的写法

第一个游标里的SQL用了字符串拼接'%s' % (sess_id),不仅有严重的SQL注入风险,还可能因为sess_id是数字类型导致语法错误。改用参数化查询才是正确姿势:

# 参数化查询不需要手动加单引号,mysql会自动处理类型
cursor_one.execute("select time_arr from info where sess_id = %s", (sess_id,))

3. 用完游标及时释放资源

虽然mysql.connector会在连接关闭时自动回收游标,但手动关闭用完的游标能避免资源占用引发的异常:

# 第一个游标用完后关闭
cursor_one.execute(...)
data = cursor_one.fetchone()
cursor_one.close()

# 再创建第二个游标
cursor_two = conn.cursor()
cursor_two.execute(...)
data_two = cursor_two.fetchall()
cursor_two.close()

4. 用上下文管理器管理连接与游标

如果你的程序是长时间运行的,推荐用上下文管理器来处理连接和游标,它会自动帮你处理关闭逻辑,减少资源泄漏的可能:

with mysql.connector.connect(user="root", password="", host="localhost", database="videojs") as conn:
    with conn.cursor() as cursor_one:
        cursor_one.execute("select time_arr from info where sess_id = %s", (sess_id,))
        data = cursor_one.fetchone()
        print(type(data))
        print(data)
    
    print("datatwo conversions... start")
    
    with conn.cursor() as cursor_two:
        cursor_two.execute("select type from questions")
        data_two = cursor_two.fetchall()

你可以先加异常捕获看具体错误信息,这样能更精准定位问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:25:36