【问题标题】:How to convert list of tuple cursor.fetchall to different format如何将元组 cursor.fetchall 列表转换为不同的格式
【发布时间】:2020-10-20 07:52:16
【问题描述】:

我的 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)]

如何转换成以下格式

  • 四舍五入到小数点后两位
  • None 必须替换为 0

预计结束

[('Books', '10.00', '0.00', 0), ('Pencil', '66.67','0.00', 0), ('Pen', '100.00', '0.00', 0)]

【问题讨论】:

  • 您的(四舍五入)输出既有字符串又有浮点数。后者不应四舍五入,因为它们并不总是被认为是精确的。您是否希望四舍五入的数字改为 Decimal 类型?
  • 基本上我需要对所有整数和字符串进行四舍五入,如果它是数字并将None替换为0
  • 使用for-loop 改变列表中的数据。
  • 对于将 None 替换为 0,您可以在数据库上添加约束以将字段的默认值设置为 0 并添加 not null 约束,这将确保您在查询结果时没有得到 None .

标签: python


【解决方案1】:
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),
]

【讨论】:

  • NameError: name 'Decimal' is not defined
  • @Nons 你需要使用from decimal import Decimal导入它
【解决方案2】:

您可以使用内置的数据库函数来实现这一点,而不是迭代整个结果集,这可能会重复两次。

SELECT column_1, ROUND(column_2, 2), ROUND(column_3, 2), COALESCE(column_4, 0) FROM table_name;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-05
    • 2015-12-07
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    • 2015-09-24
    • 1970-01-01
    相关资源
    最近更新 更多