gpt4 book ai didi

python - 游标对象的 MySQL-Python 连接器属性错误

转载 作者:行者123 更新时间:2023-11-29 16:58:59 24 4
gpt4 key购买 nike

我正在 Flask 中的一个项目中使用 mysql-connector-python 包。对于注册路由部分,我希望 MySQL 检查用户名是否已经存在,如果存在,我将设置一个错误。我的代码如下所示:

@bp.route('/signup', methods=('POST',))
def signup():

...

username = reqObj["username"]
password = reqObj["password"]
error = None

db = get_db()
cursor = db.cursor()
query = ("SELECT * FROM userinfo "
"WHERE username=%s")

existingUser = cursor.execute(query, (username,)).fetchone()

if existingUser is not None:
error = "Username already exists"

if error is None:
cursor.execute(
'INSERT INTO userinfo (username, password) VALUES (%s, %s)',
(username, generate_password_hash(password))
)

cursor.close()
db.commit()

res = {'actionSuccess': True}
return jsonify(res)
else:
res = {'actionSuccess': False, 'error': error}
return jsonify(res)

get_db() 函数返回 mysql.connector.connect() 对象。然而,当我在服务器上运行它并测试它时,我在 Flask 中收到一条错误消息:

...
existingUser = cursor.execute(query, (username,)).fetchone()
AttributeError: 'NoneType' object has no attribute 'fetchone'

所以我认为我的错误出在我的cursor.execute() 的某个地方,我猜它返回的是NoneType。因此,我删除了 fetchone() 函数并重试,但现在我收到此错误:

...
File "e:\flasktest2\lib\site-packages\mysql\connector\connection.py", line 1128, in handle_unread_result
raise errors.InternalError("Unread result found")
mysql.connector.errors.InternalError: Unread result found

这更加令人困惑,因为它现在说有未读的结果,而刚才的cursor.execute()是一个NoneType。我不知道是什么导致了错误。然后我尝试注释掉整个 SELECT 查询部分,并测试一下 INSERT 是否有效,果然确实有效。是什么导致了我的错误?

最佳答案

显然,使用 mysql 连接器,cursor.execute(...) 将返回 None,无论执行语句的结果是什么。但是,即使结果是空集,结果也将存储在游标对象本身中。在使用游标在新连接上执行新语句之前,您还必须获取当前查询的所有结果。这意味着要做:

cursor.execute(...)
cursor.fetchone()

相对于:

cursor.execute(...).fetchone()

关于python - 游标对象的 MySQL-Python 连接器属性错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52400913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com