如何在Python的pymysql中获取单列数据并转为数组(附示例)
如何用PyMySQL获取单列数据并转为数组
嘿,这个问题我熟!在PyMySQL里获取单列数据并转成你想要的数组格式其实没那么复杂,咱们一步步拆解来看:
第一步:执行查询获取原始结果
先完成基本的数据库连接与查询操作,这里我推荐用with语句管理游标,不用手动关闭游标,省心又安全:
import pymysql # 替换成你自己的数据库配置信息 conn = pymysql.connect( host='localhost', user='你的用户名', password='你的密码', database='目标数据库名', charset='utf8mb4' ) try: # 创建游标并执行查询 with conn.cursor() as cursor: sql = "SELECT name FROM users" cursor.execute(sql) # 这里返回的是元组的元组,格式类似 (('Tom',), ('Ben',), ('Jon',)) raw_results = cursor.fetchall() finally: # 无论查询成功与否,最后都要关闭数据库连接 conn.close()
第二步:把原始结果转为目标数组
拿到raw_results之后,咱们只需要提取每个子元组里的第一个元素就行,有两种简洁好用的方式:
方式一:列表推导式(推荐,可读性拉满)
这是最直观也最常用的方法,一行代码直接搞定:
name_array = [row[0] for row in raw_results]
执行后name_array就是你想要的 ["Tom", "Ben", "Jon"] 格式啦。
方式二:使用map函数
如果你偏爱函数式编程风格,也可以用map配合匿名函数实现:
name_array = list(map(lambda x: x[0], raw_results))
效果和列表推导式完全一致。
额外小技巧:处理大数据量场景
如果你的users表数据量特别大,用fetchall()一次性加载所有数据可能会占用过多内存,这时候可以用fetchone()循环读取、分批处理:
name_array = [] with conn.cursor() as cursor: cursor.execute(sql) while True: row = cursor.fetchone() if not row: # 没有更多数据时退出循环 break name_array.append(row[0])
整合后的完整可运行代码
把上面的步骤整合起来,最终的代码长这样:
import pymysql def get_users_name_list(): # 数据库连接配置,按需修改 conn_config = { 'host': 'localhost', 'user': 'root', 'password': 'your_password', 'database': 'your_database', 'charset': 'utf8mb4' } name_list = [] conn = pymysql.connect(**conn_config) try: with conn.cursor() as cursor: sql = "SELECT name FROM users" cursor.execute(sql) # 用列表推导式快速转换结果 name_list = [row[0] for row in cursor.fetchall()] finally: conn.close() return name_list # 调用函数查看结果 print(get_users_name_list()) # 输出: ['Tom', 'Ben', 'Jon']
内容的提问来源于stack exchange,提问作者Fredyang
相关产品推荐
相关产品推荐

