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

[Python]如何从SQL数据库获取纯数据,而非带括号逗号的返回结果?

问题根因

Python所有符合DB-API规范的数据库驱动,查询返回的每行结果默认都是元组格式,哪怕你只查单个字段,也会返回长度为1的元组,也就是你看到的(data,)格式,只要取元组的第0位元素就能拿到实际存储的值。

现有代码快速修复

只需要在所有取值的位置加[0]取元组第一个元素即可:

def getDatabaseInfo():
    """This function gets all the user information from the database"""
    mycursor.execute("SELECT userId FROM users")
    #Puts all userID's into the userID list. This list is then used to start creating
    #objects once the user class is made
    for x in mycursor:
        userID.append(x[0]) # 取元组第一位拿到实际userId值


for x in userID:
    newUser = User(x)
    mycursor.execute("SELECT username FROM users WHERE userId = " + str(x) + "")
    for y in mycursor:
        newUser.setusername(y[0]) # 取元组第一位拿到实际用户名

    mycursor.execute("SELECT password FROM users WHERE userId = " + str(x) + "")
    for y in mycursor:
        newUser.setpassword(y[0]) # 取元组第一位拿到实际密码

    mycursor.execute("SELECT first_name FROM users WHERE userId = " + str(x) + "")
    for y in mycursor:
        newUser.setfirst_name(y[0]) # 取元组第一位拿到实际名字

    mycursor.execute("SELECT last_name FROM users WHERE userId = " + str(x) + "")
    for y in mycursor:
        newUser.last_name = y[0] # 取元组第一位拿到实际姓氏

    mycursor.execute("SELECT appetizer FROM users WHERE userId = " + str(x) + "")
    for y in mycursor:
        newUser.appetizer = y[0] # 取元组第一位拿到实际配置值

    #Stores instance into dictionary with username as key
    users[newUser.username] = newUser
    
    #prints information
    newUser.print_user_info()
性能优化方案(可选)

你当前的实现会对每个用户发起5次单独的字段查询,用户量较大时性能损耗非常高,可以直接一次查询拉取所有用户的全部需要字段,大幅减少数据库交互次数:

def getDatabaseInfo():
    """This function gets all the user information from the database"""
    # 单次查询拉取所有需要的字段,避免循环请求数据库
    mycursor.execute("SELECT userId, username, password, first_name, last_name, appetizer FROM users")
    for row in mycursor:
        # 直接解包元组拿到所有字段值
        user_id, username, password, first_name, last_name, appetizer = row
        newUser = User(user_id)
        newUser.setusername(username)
        newUser.setpassword(password)
        newUser.setfirst_name(first_name)
        newUser.last_name = last_name
        newUser.appetizer = appetizer
        users[newUser.username] = newUser
        newUser.print_user_info()

内容的提问来源于stack exchange,提问作者William Hiatt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:15:03