Pyodbc返回(十进制(' 100.00'),)

时间:2016-10-25 11:02:44

标签: python sql-server odbc pyodbc

我使用pyodbc从表中读取数值,但不是仅仅给我' 100'它给了我"(十进制(' 100.00& #39;))

有没有办法获得这个数字?

我正在跑步:

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

如果已经回答了我的道歉,但我还没有找到解决方法。

4 个答案:

答案 0 :(得分:1)

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

假设该值可能在小数点后面有数字,您可以&#34;只获得数字&#34;通过致电float(),但如果列代表金钱(<34; CurrentBalance&#34;建议),想要这样做。使用float值来表示金钱是错误想法

相反,您应该继续将该值用作十进制。

答案 1 :(得分:0)

通过执行以下操作,我设法得到了这个数字:

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

&#34;导致[0]&#34;正在返回&#34;(十进制(&#39; 100.00&#39;),)#34;但是当我使用&#34;结果[0] [0]时它只返回&#34; 100.00& #34;

答案 2 :(得分:0)

我知道这个问题已经存在了将近三年,但是如果它可以帮助其他人搜索,我的建议是导入熊猫并使用它来解析它。这种方法多次帮助了我。

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列中第一个响应的值。

答案 3 :(得分:-1)

从一开始就在查询中处理它会更清晰:

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