Python操作MySQL获取gameVersion时触发0x000002A连接错误求助
MySQL连接错误排查:获取数据库字段返回None的问题
错误现象
- 触发错误提示:
0x000002A MySQL Connection Error! - 问题场景:尝试从
gameversions表通过游戏名称Grand Thiefs获取gameVersion字段(预期值为beta)时,得到的结果是None,进而触发上述错误。
引发问题的代码(functions.py)
import mysql.connector database = mysql.connector.connect( host = "localhost", user = "root", passwd = "s+W2DrcPQK5dada2^!dV!RUSZ@2$PbEX*3eacT", database = "PythonDB", ) my_cursor = database.cursor(buffered=True) user = "" game = "" db_version = my_cursor.execute(f"SELECT gameVersion FROM gameversions WHERE gameName = 'Grand Thiefs'") sqlStuff = "INSERT INTO users (usersUid, usersEmail, usersPwd, UsersPerms, usersMoney, gameVersion) VALUES (%s, %s, %s, %s, %s, %s)" sqlStuffv = "INSERT INTO gameversions (gameVersion, gameName) VALUES (%s, %s)" def CreateDataBase(name): my_cursor.execute(f"CREATE DATABASE {name}") #my_cursor.execute("CREATE TABLE gameVersions (gameVersion varchar(255) NOT NULL, gameName varchar(255) NOT NULL);") def ShowTables(): my_cursor.execute("SHOW TABLES") def ShowDataBases(): my_cursor.execute("SHOW DATABASES") def CreateUser(Name, Password, Email, Version): global user user = [{Name}, {Email}, {Password}, "User", "0", {Version}] my_cursor.execute(sqlStuff, user) database.commit() def checkversion(version, name): if version != db_version: if type(db_version) == float: return "Failure" else: return "MySQL Connection Error" else: return "Correct"
问题根源
- 查询结果获取逻辑错误:
db_version = my_cursor.execute(...)完全错误——execute()仅负责执行SQL语句,不会直接返回查询结果,它的返回值固定为None,这就是你打印db_version得到None的直接原因。 - 未正确提取查询数据:执行SELECT语句后,必须调用
fetchone()/fetchall()等方法才能拿到查询结果。 checkversion函数逻辑错误:因为db_version是None,version != db_version永远为真,且type(db_version)是NoneType而非float,所以直接返回"MySQL Connection Error"——这并非真的连接错误,是函数逻辑误判。
修复步骤
1. 修正查询结果获取逻辑
替换原有的db_version赋值代码,改用参数化查询避免SQL注入,同时处理查询不到数据的情况:
# 用参数化查询替代字符串拼接 my_cursor.execute("SELECT gameVersion FROM gameversions WHERE gameName = %s", ("Grand Thiefs",)) result = my_cursor.fetchone() # 如果查询到结果就取第一个字段,否则设为None db_version = result[0] if result else None
2. 修正checkversion函数逻辑
根据实际需求调整判断逻辑,移除不合理的float类型判断:
def checkversion(version, name): # 先判断是否查询到有效版本 if db_version is None: return "未查询到对应游戏版本" if version != db_version: return "版本不匹配" else: return "Correct"
3. 修复其他潜在问题
CreateUser函数中误用集合(大括号)存储参数,会打乱参数顺序,改成列表:
def CreateUser(Name, Password, Email, Version): global user # 用中括号定义列表,保证参数顺序正确 user = [Name, Email, Password, "User", "0", Version] my_cursor.execute(sqlStuff, user) database.commit()
内容的提问来源于stack exchange,提问作者czlowieczyna-czan
相关产品推荐
相关产品推荐

