如何提取MySQL查询结果列表中单元素元组的ID数值?
解决mysql.connector返回单元素元组的问题
你遇到的是cursor.fetchall()的默认行为:它会把查询结果的每一行封装成元组返回,哪怕只查询了一个字段,所以每个元素都是(数值,)这种单元素元组。要得到纯数值的列表,有几种简单的处理方式:
方法一:列表推导式(推荐)
直接遍历查询结果,提取每个元组的第一个元素生成新列表:
import mysql.connector con = mysql.connector.connect(host='localhost', database='database', user='root', password=database_pw) cursor = con.cursor() query = """select playerid from nba_players;""" cursor.execute(query) # 提取每个元组的第一个元素,生成纯数值列表 playerids = [row[0] for row in cursor.fetchall()] print(playerids)
输出结果:
[20000441, 20000442, ...]
方法二:map函数
用map配合匿名函数提取元素:
playerids = list(map(lambda x: x[0], cursor.fetchall()))
方法三:逐行处理(适合大结果集,节省内存)
如果查询结果非常大,不想一次性加载所有数据到内存,可以用cursor.fetchone()循环处理:
playerids = [] row = cursor.fetchone() while row is not None: playerids.append(row[0]) row = cursor.fetchone()
注:你期望输出里的
(20000441)在Python中其实就是普通整数,不是元组,所以上面的方法得到的纯数值列表已经符合需求。
内容的提问来源于stack exchange,提问作者Matthew Jarrett
相关产品推荐
相关产品推荐

