再次创建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
相关产品推荐
相关产品推荐

