【问题标题】:Pyodbc returning (Decimal('100.00'),)Pyodbc 返回 (Decimal('100.00'),)
【发布时间】:2016-10-25 11:02:43
【问题描述】:

我正在使用 pyodbc 从表中读取数值,但不是只给我 '100',而是给我 "(Decimal('100.00'),)。

有没有办法只得到号码?

我在跑步:

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

如果这个问题已经得到解答,我深表歉意,但我无法找到解决这个问题的方法。

【问题讨论】:

    标签: python sql-server odbc pyodbc


    【解决方案1】:

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

    假设值可能在小数点后有数字,您可以通过调用float()“只获取数字”,但如果列代表金钱,您不想这样做(正如名称“CurrentBalance”所暗示的那样)。使用float 值来表示金钱是一个坏主意

    相反,您可能应该继续将该值用作小数。

    【讨论】:

      【解决方案2】:

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

      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”

      【讨论】:

        【解决方案3】:

        我知道这个问题已经快三年了,但如果它有助于其他人搜索,我的建议是导入 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 列中第一个响应的值。

        【讨论】:

          【解决方案4】:

          从一开始就在查询中处理它会更干净:

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

          【讨论】:

          • 是的,假设该列中的值确实是整数。如果不是,那么CAST(... AS INTEGER) 会导致比将其转换为float 更糟糕的“舍入误差”。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-23
          • 2018-05-12
          • 1970-01-01
          • 2021-05-13
          • 2012-01-11
          • 1970-01-01
          相关资源
          最近更新 更多