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

MySQL登录系统故障:无法校验列表中的元组,求修复方案

登录系统校验失败的修复方案

问题根源

uploadData()函数中,mycursor.fetchall()会返回一个包含所有(用户名, 密码)元组的列表,但你使用bigdata.append(data)将这个列表作为单个元素添加到了bigdata中,导致bigdata变成嵌套结构(例如bigdata = [ [(u1,p1), (u2,p2)] ])。登录时你判断的是单个元组(user,passw)是否在bigdata里,自然无法匹配。

修复方案

方案1:修正数据加载逻辑(基于现有列表校验的方式)

将append()替换为extend(),把fetchall()返回的所有元组逐个添加到bigdata中,避免嵌套:

def uploadData():
    print("Bezig met uploaden.")
    mycursor.execute("SELECT name, password FROM userData")
    data = mycursor.fetchall()
    # 用extend替代append,将data中的每个元组直接加入bigdata
    bigdata.extend(data)
    print("Upload worked. \n")

需确保bigdata在函数外已初始化(例如bigdata = [])。

方案2:直接赋值初始化(更简洁)

直接将bigdata赋值为fetchall()的结果,无需嵌套:

def uploadData():
    print("Bezig met uploaden.")
    mycursor.execute("SELECT name, password FROM userData")
    global bigdata
    # 直接覆盖bigdata为查询结果的元组列表
    bigdata = mycursor.fetchall()
    print("Upload worked. \n")

注意:必须添加global bigdata声明,否则会被当作函数内的局部变量处理。

方案3:直接查询数据库校验(推荐生产环境使用)

不需要将所有用户数据加载到内存,登录时直接查询数据库校验,更高效且避免内存占用问题:

def login():
    userKnown = input("Hallo, heeft u al een account? y/n ")

    if userKnown == "y":
        user = input("username: ")
        passw = input("password: ")
        # 直接查询数据库匹配用户名和密码
        mycursor.execute("SELECT * FROM userData WHERE name = %s AND password = %s", (user, passw))
        # fetchone()如果找到匹配项则返回元组,否则返回None
        if mycursor.fetchone():
            print("login succesful")
        else:
            print("try again")

内容的提问来源于stack exchange,提问作者Rens Vermeulen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:15:34