如何从查询结果中删除“Decimal”

2024-05-23 16:28:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用以下代码从PostgreSQL查询得到结果:

cur = con.cursor()
cur.execute("""SELECT to_char(tt.service_date,'yyyy-mm-01') AS txn_month,
        SUM (tt.customer) AS customer,SUM (tt.tour) AS tour,
        SUM (tt.distancetraveled) AS distancetraveled
    FROM
        tbl_travel as tt
    GROUP BY
        txn_month""")
rows = cur.fetchall()

我的查询结果如下:

^{pr2}$

我需要删除值前面的“Decimal”字符串,得到如下结果:

[('2016-01-01', '11.0909090909090909', '3.7272727272727273','58.5354545454545'),
 ('2016-02-01', '11.6666666666666667', '4.0000000000000000','74.8766666666667')]

Tags: 代码executepostgresqlascustomerconselectcursor
3条回答

使用list comprehensions

from decimal import Decimal

lists = [('2016-01-01', Decimal('11.0909090909090909'), Decimal('3.7272727272727273'), 58.5354545454545),
         ('2016-02-01', Decimal('11.6666666666666667'), Decimal('4.0000000000000000'), 74.8766666666667)]

results = [tuple(str(item) for item in t) for t in lists]

print(results)
[('2016-01-01', '11.0909090909090909', '3.7272727272727273', '58.5354545455'), 
 ('2016-02-01', '11.6666666666666667', '4.0000000000000000', '74.8766666667')]

尝试以下操作:

res = [(item[0], float(item[1]), float(item[2]), item[3]) for item in my_list]

输出:

^{pr2}$

使用以下方法获取字符串值并避免由于float精度而导致的更改:

>>> res = [(item[0], str(item[1]), str(item[2]), str(item[3])) for item in my_list]
>>> res
[('2016-01-01', '11.0909090909090909', '3.7272727272727273', '58.5354545455'), ('2016-02-01', '11.6666666666666667', '4.0000000000000000', '74.8766666667')]

数字以Python“Decimal”格式存储(请参见:https://docs.python.org/3.4/library/decimal.html

您可以通过映射数据类型将它们转换为普通字符串,一些示例代码可以执行以下操作:

from decimal import Decimal

var = [('2016-01-01', Decimal('11.0909090909090909'), Decimal('3.7272727272727273'),
  58.5354545454545),
 ('2016-02-01', Decimal('11.6666666666666667'), Decimal('4.0000000000000000'),
  74.8766666666667)]

var_fixed = []
for row in var:
    var_fixed.append(list(map(str, list(row))))

这使得var_固定为:

^{pr2}$

相关问题 更多 >