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

MySQL游标执行查询报错:AttributeError: 'NoneType'对象无execute属性

解决AttributeError: 'NoneType' object has no attribute 'execute'问题

我一眼就看出问题出在哪了——你创建第二个游标时用错了方法!

核心错误原因

你已经成功建立了conn1这个连接对象,但你调用了conn1.connect()来创建游标,这完全不对。connect()是mysql.connector模块用来新建连接的函数,而不是已连接对象的方法。调用conn1.connect()会返回None,所以你的cursor1其实是个空对象,自然调用不了execute()方法。

两步修正方案

  1. 正确创建游标
    对于已经存在的连接对象,创建游标应该用.cursor()方法,和你第一个游标cursor = conn.cursor()的写法一致。

  2. 修复SQL语句的变量传递问题
    你写的uid='row[0]'会把row[0]当成字符串字面量传给数据库,而不是取row列表里第一个元素的值。而且这种写法还存在SQL注入风险,正确的做法是用参数化查询。

修正后的完整代码片段

from fpdf import FPDF, HTMLMixin
import mysql.connector

class HTML2PDF(FPDF, HTMLMixin):
    pass

# 其实不需要创建3个独立连接,一个连接可以创建多个游标,这里先保留你的写法
conn = mysql.connector.connect(host='localhost', database='swd', user='root', password='param2000')
conn1 = mysql.connector.connect(host='localhost', database='swd', user='root', password='param2000')
conn2 = mysql.connector.connect(host='localhost', database='swd', user='root', password='param2000')

# 第一个游标正常工作
cursor = conn.cursor()
cursor.execute("SELECT * from 14batch")
row = cursor.fetchone()

html='''blah blah blah'''

# 修正1:用cursor()创建游标,而不是connect()
cursor1 = conn1.cursor()
# 修正2:用参数化查询传递变量,避免SQL注入和变量引用错误
cursor1.execute("SELECT * from med_ins_14batch where uid=%s", (row[0],))
row1 = cursor1.fetchone()

额外优化建议

其实你根本不需要创建3个独立的数据库连接,同一个连接对象可以创建多个游标,这样能减少资源消耗,比如:

# 只创建一个连接
conn = mysql.connector.connect(host='localhost', database='swd', user='root', password='param2000')
# 基于同一个连接创建多个游标
cursor = conn.cursor()
cursor1 = conn.cursor()
cursor2 = conn.cursor()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:19:23