单列SQL查询结果带括号引号异常排查求助
解决mysql.connector单列查询返回带括号引号结果的问题
别担心,这个问题其实是mysql.connector的正常行为,很容易搞定!
问题原因
不管你查询的是单列还是多列,mysql.connector的游标返回的每一行结果都是元组。当你查多列时,可能习惯用(col1, col2)的方式解构元组,直接拿到单个字段值;但查单列时,如果写法不对,就会把整个单元素元组(比如('32645845',))当成结果处理,所以才会看到带括号和逗号的输出。
你原来的循环里写for (User_id) in mycursor:,这里的括号其实没起到解构作用,相当于直接遍历元组本身,所以User_id变量拿到的是整个单元素元组。
解决方案
有两种简单的修改方式,任选其一即可:
方法1:用单元素元组解构
直接在循环里用(user_id,)的形式,明确告诉Python要解构这个单元素元组,拿到里面的具体值:
import mysql.connector mydb = mysql.connector.connect( host="xxxxxxxx", user="xxxxxxxx", passwd="xxxxxxxx", database="vmware" ) query_string = "select UserID FROM VM WHERE CommissionStatus='commissioned';" mycursor = mydb.cursor() mycursor.execute(query_string) ReturnedUser_id = [] # 改成带逗号的单元素元组解构 for (user_id,) in mycursor: ReturnedUser_id.append(user_id) print(user_id) # 现在输出就是纯字符串,比如32645845
方法2:通过索引获取元组的第一个元素
如果觉得解构写法有点奇怪,也可以直接遍历每一行元组,然后通过索引[0]取第一个元素:
import mysql.connector mydb = mysql.connector.connect( host="xxxxxxxx", user="xxxxxxxx", passwd="xxxxxxxx", database="vmware" ) query_string = "select UserID FROM VM WHERE CommissionStatus='commissioned';" mycursor = mydb.cursor() mycursor.execute(query_string) ReturnedUser_id = [] for row in mycursor: user_id = row[0] # 取元组的第一个元素 ReturnedUser_id.append(user_id) print(user_id)
验证效果
修改后你再打印user_id的类型,会发现从原来的tuple变成了对应的字段类型(比如字符串),输出也不会再带括号和引号了。
内容的提问来源于stack exchange,提问作者ohgetout
相关产品推荐
相关产品推荐

