mysql.connector 8.0.30创建buffered+prepared游标报错求助
解决mysql.connector中buffered与prepared游标冲突的问题
在mysql.connector 8.0.30版本中,buffered和prepared是两种互斥的游标类型,无法同时启用,这就是触发ValueError: Cursor not available with given criteria: buffered, prepared的原因。
以下是两种替代方案,根据实际需求选择:
方案1:用prepared游标+手动缓冲结果
如果核心需求是使用服务器端预编译语句,同时需要缓冲结果,可以手动将查询结果存入列表实现缓冲效果:
conn = mysql.connector.connect(...) # 仅启用prepared游标 cur = conn.cursor(prepared=True) cur.execute(stmt, (self.email, self.password,)) # 手动缓冲结果到列表 results = list(cur) uid = results[0] if results else None
方案2:用buffered游标+参数化查询
如果主要需要客户端缓冲结果集,同时想实现安全的参数化查询,无需启用prepared游标——mysql.connector的普通buffered游标本身支持参数化执行:
conn = mysql.connector.connect(...) cur = conn.cursor(buffered=True) # 使用%s作为占位符,自动处理参数化 cur.execute(stmt, (self.email, self.password,)) uid = cur.fetchone()
补充说明
mysql.connector的prepared游标基于服务器端预编译实现,buffered游标则是在客户端内存中缓存整个结果集,两者实现逻辑不兼容,因此无法同时启用。根据业务优先级选择核心特性,再通过上述方式补全另一个需求即可。
内容的提问来源于stack exchange,提问作者Jonathan Coletti
相关产品推荐
相关产品推荐

