从mysqldb查询中获取原始十进制值

jef*_*ind 15 python mysql mysql-python

我正在使用MySQLdb包在python中执行mysql查询.代码看起来像这样:

c=db.cursor()
c.execute("""select * from table""")
output = []
for row in c:
    output.append(row[4])
Run Code Online (Sandbox Code Playgroud)

其中row[4]包含我想要存储在output列表中的十进制值.

问题是我得到的每一个值都是这样的:列表中Decimal('XX.XX')我想要的output只是XX.XX. 在脚本的末尾,我的output列表如下所示:

[Decimal('10.02'), Decimal('20.24'), ...]
Run Code Online (Sandbox Code Playgroud)

但我需要它来包含数字,如下所示:

[10.02, 20.24, ...]
Run Code Online (Sandbox Code Playgroud)

我怎么做?

谢谢!

Mak*_*cha 13

c=db.cursor()
c.execute("""select * from table""")
output = []
for row in c:
    output.append(float(row[4]))
Run Code Online (Sandbox Code Playgroud)

  • 好的。我们可以轻松地将Decimal('XX.XX')转换为XX.XX。但是为什么我们要把小数放在第一位。理想情况下,它应在查询正确后返回整数或浮点数。我们是否有任何文档链接给出了获取小数的解释。@Maksym Polshcha (2认同)

Ash*_*ary 5

用途float():

output.append(float(row[4]))
Run Code Online (Sandbox Code Playgroud)

float()可能导致类似于:

In [184]: float(Decimal('10.02'))
Out[184]: 10.02

In [185]: float(Decimal('20.24'))
Out[185]: 20.239999999999998
Run Code Online (Sandbox Code Playgroud)


Kan*_*thy 5

如果您尝试编写对列输出进行操作的通用代码,则上述解决方案将不起作用。在这种情况下,我们可以SELECT以列返回为 String 的方式编写我们的查询,我们只是得到我们想要的值。查询可以用以下方式构建,

SELECT 
 CAST(COL1 AS CHAR) AS COL1,
 CAST(COL2 AS CHAR) AS COL2,
 .
 .
 .
FROM TABLE;
Run Code Online (Sandbox Code Playgroud)