Pyodbc返回(Decimal('100.00'),)

4
我正在使用pyodbc从表中读取数字值,但是它不仅给了我'100',还有"(Decimal('100.00'),)"。
有没有办法只得到数字?
我正在运行:
cursor.execute("SELECT CurrentBalance as Numeric FROM [AccountsQA].[dbo].[AccountBalance] where AccountId = '2000013' and Currency = 'ZAR'")

如果这个问题已经有了答案,我很抱歉,但是我一直没有找到解决方法。

4个回答

2

可以推测该表将该列定义为DECIMAL类型,因此pyodbc会返回Decimal对象以忠实地表示该值。

假设该值可能有小数点后的数字,您可以通过调用float()来“仅获取数字”,但如果该列代表货币(如名称“CurrentBalance”所示),则不要这样做。使用float值来表示货币是一个糟糕的想法

相反,您应该继续使用该值作为Decimal。


1

我知道这个问题已经有将近三年的历史了,但是如果还有其他人在搜索类似的问题,我的建议是导入Pandas并使用它来解析。这种方法在多个场合都帮助了我。

import pyodbc
import pandas as pd
conn = pyodbc.connect('Driver={SQL Server};'
                      'Server=YourServer;'
                      'Database=YourDatabase;') 
##this is for trusted connection.  
###You may also need to add  Username and password for your code

data = pd.read_sql_query(("SELECT CurrentBalance as Numeric FROM [AccountsQA].[dbo].[AccountBalance] where AccountId = '2000013' and Currency = 'ZAR'"), conn)

print(data.CurrentBalance[0])

这将为您提供CurrentBalance列中第一个响应的值。

0
我通过以下方式成功获取了数字:

cursor.execute("SELECT CurrentBalance as Numeric FROM [AccountsQA].[dbo].[AccountBalance] where AccountId = '2000013' and Currency = 'ZAR'")
result = cursor.fetchall()
amount = result[0][0]

"

"result[0]"返回的是"(Decimal('100.00'),)",但当我使用"result[0][0]"时,它只返回"100.00"

"

-1

最好从一开始就在查询中处理它,这样会更加清晰:

cursor.execute("SELECT CAST(CurrentBalance AS INTEGER) AS Numeric FROM [AccountsQA].[dbo].[AccountBalance] WHERE AccountId = '2000013' AND Currency = 'ZAR'")

假设该列中的值确实为整数,则是的。如果不是,那么将其转换为float会比使用CAST(... AS INTEGER)导致更严重的“舍入误差”。 - Gord Thompson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接