Python从数据库取数存入列表:去除Decimal类型标识需求
嘿,这个问题我之前也碰到过!pymysql会自动把数据库里的DECIMAL类型映射成Python的Decimal对象——虽然这对高精度计算(比如货币类业务)很友好,但要是只想拿到纯数值来展示或者处理,确实得做个小转换。
给你两种简单的解决思路,第一种最直接适配你的代码:
方法一:添加到列表时直接转换
在把字段值加入列表的时候,用float()或者int()把Decimal对象转成普通数值就行,修改后的代码如下:
import pymysql as sql conn = sql.Connect(host='localhost', unix_socket='', user='root', passwd='', db='agd') cursor = conn.cursor() stat = 'SELECT * FROM stuff' cursor.execute(stat) lista = list(cursor.fetchall()) test_names = [] test_prices = [] test_weights = [] for row in lista: test_names.append(row[1]) # 将Decimal转换为float类型 test_prices.append(float(row[2])) test_weights.append(float(row[3])) print(test_names) print(test_prices) print(test_weights)
运行后你的输出就会变成纯数值列表了:
['Marcia', 'Daniel', 'Corey', 'Morgan', 'Kayla', 'Christopher', 'Heather', 'Jessica', 'Ralph', 'Wanda']
[5558.06, 4145.11, 4452.92, 7921.65, 5578.65, 851.2, 2260.02, 5388.26, 2020.39, 6850.01]
[56.47, 75.56, 89.83, 12.32, 4.74, 36.99, 47.88, 84.42, 93.63, 53.12]
如果你的数值都是整数,也可以用int(row[2])来转换,根据实际数据类型选就行。
方法二:自定义游标转换器(进阶)
如果你的项目里有大量DECIMAL类型需要转换,也可以在创建游标时指定自定义的类型转换器,这样就不用每次手动转了。不过对于你的场景来说,第一种方法已经足够简单高效。
小提醒:如果是处理货币类的高精度计算,其实保留Decimal对象会更稳妥,避免float的精度丢失问题;但如果只是展示或者普通计算,转成float完全没问题。
内容的提问来源于stack exchange,提问作者Gonzo Alonzo

