Python 如何将tuple cursor.fetchall列表转换为不同格式

Python 如何将tuple cursor.fetchall列表转换为不同格式,python,Python,我的mysql查询是多个连接cursor.fetchall(),它给出以下输出 [('Books',Decimal('10.000')、Decimal('0E-20')、None)、('Pencil',Decimal('66.66666')、Decimal('0E-20')、None)、('Pen',Decimal('100.0000')、Decimal('0E-20')、None)] 如何转换为以下格式 四舍五入到两位小数 无需替换为0 预料之外 [('Books'、'10.00'、'0.

我的mysql查询是多个连接
cursor.fetchall()
,它给出以下输出

[('Books',Decimal('10.000')、Decimal('0E-20')、None)、('Pencil',Decimal('66.66666')、Decimal('0E-20')、None)、('Pen',Decimal('100.0000')、Decimal('0E-20')、None)]

如何转换为以下格式

  • 四舍五入到两位小数
  • 无需替换为0
预料之外


[('Books'、'10.00'、'0.00',0),('Pencil'、'66.67'、'0.00',0),('Pen'、'100.00'、'0.00',0)]
您可以使用内置的数据库函数来实现这一点,而不是迭代整个结果集(可能会重复两次)

SELECT column_1, ROUND(column_2, 2), ROUND(column_3, 2), COALESCE(column_4, 0) FROM table_name;
输出:
可以这样做,您的(四舍五入)输出既有字符串也有浮点数。后者不应该四舍五入,因为它们不能总是被认为是精确的。您希望取整后的数字改为十进制类型吗?基本上,我需要对所有整数和字符串进行取整,如果是数字,则将其替换为0。使用
for
-循环更改列表中的数据。要将无替换为0,您可以在数据库中添加约束,将字段的默认值设置为0,并添加非空约束,这将确保在查询结果时没有得到任何结果。NameError:名称'Decimal'不正确defined@Nons您需要使用
from decimal import decimal
from decimal import Decimal

sample = [
    ("Books", Decimal("10.000"), Decimal("0E-20"), None),
    ("Pencil", Decimal("66.66666"), Decimal("0E-20"), None),
    ("Pen", Decimal("100.0000"), Decimal("0E-20"), None),
]

result = [(i, "%.2f" % j, "%.2f" % k, l if l else 0) for i, j, k, l in sample]
print(result)
[
    ("Books", "10.00", "0.00", 0),
    ("Pencil", "66.67", "0.00", 0),
    ("Pen", "100.00", "0.00", 0),
]