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

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"

问题根源

  1. 查询结果获取逻辑错误:db_version = my_cursor.execute(...)完全错误——execute()仅负责执行SQL语句,不会直接返回查询结果,它的返回值固定为None,这就是你打印db_version得到None的直接原因。
  2. 未正确提取查询数据:执行SELECT语句后,必须调用fetchone()/fetchall()等方法才能拿到查询结果。
  3. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:45:37