0

我正在使用 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 数据库中获取十进制数据而不会出现这个问题?

其次,为什么程序打印此消息而不是崩溃或引发异常?如果我能应付这个小错误,那么我该如何阻止不断向我吐出消息呢?

4

1 回答 1

2

是的。使用 pyodbc (free/OSS) 或 mxodbc (commercial, 在 0.8 中使用 mxodbc 仅与最新的 mxodbc) 方言,它们已被测试为以全精度交付 DECIMAL 对象。pymssql 目前是一个未知数,因为这个 DBAPI 经历了许多重写/所有权更改,并且它的状态有点悬而未决。

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

于 2012-11-27T23:26:45.793 回答