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

Python从数据库取数存入列表:去除Decimal类型标识需求

解决pymysql查询返回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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:35:12