使用pymssql访问小数

时间:2012-11-23 15:45:38

标签: python sqlalchemy pymssql

我使用python,sqlalchemy和pymssql连接到专有的MSSQL数据库。数据库无法编辑,我只需要从中读取数据。现在我的程序首次在数据库上运行查询时会发出此消息。

path/to/sqlalchemy/dialects/mssql/pymssql.py:50: SAWarning: Dialect mssql+pymssql does *not* support Decimal objects natively, and SQLAlchemy must convert from floating point - rounding errors and other issues may occur. Please consider storing Decimal numbers as strings or integers on this platform for lossless storage.
  return sqltypes.Numeric.result_processor(self, dialect, type_)

我理解这是sqlalchemy对我说话,这意味着当我从Decimal类型的字段中读取数据时,它将被转换为Float并在此过程中舍入。

所以我对此有两个问题......

首先,在Linux机器上有没有办法从MSSQL数据库中获取Decimal数据而没有这个问题?

其次,为什么程序会打印此消息而不是崩溃或引发异常?如果我可以应对这个小错误,那么如何阻止消息不断地向我吐口水呢?

1 个答案:

答案 0 :(得分:2)

是肯定的。使用pyodbc(free / OSS)或mxodbc(商业版,仅使用mxodbc在0.8中使用最新的mxodbc)方言,它们已经过测试,可以提供完全精确的DECIMAL对象。 pymssql目前是未知的,因为这个DBAPI经历了许多重写/所有权更改,其状态有点悬而未决。

另外,警告是因为你可以获得十进制对象,它们只会受到通常的浮点怪异(如3.456回归为3.4559999999999类型的东西)。因此,最好允许使用警告读取值,而不是阻止其他部分工作的功能。