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に変換され、プロセスで丸められることを意味します。

だから私はこれについて2つの質問があります...

まず、Linuxマシンで、この問題なしにMSSQLデータベースからDecimalデータを取得する方法はありますか?

次に、プログラムがクラッシュしたり例外を発生させたりするのではなく、このメッセージを出力するのはなぜですか?この小さなエラーに対処できる場合、メッセージが絶えず吐き出されるのを防ぐにはどうすればよいですか?

4

1 に答える 1

2

はい。pyodbc(無料/ OSS)またはmxodbc(商用、最新のmxodbcでのみ0.8のmxodbcを使用)方言を使用します。これらは、完全な精度でDECIMALオブジェクトを配信することがテストされています。このDBAPIは多くの書き換え/所有権の変更が行われ、そのステータスは少し空中であるため、pymssqlは現在不明です。

また、警告は、 10進数のオブジェクトを取り戻すことができるため、通常の浮動小数点の奇妙さ(3.456が3.4559999999999タイプのものとして戻ってくるなど)の影響を受けるだけです。部分的に機能している機能をブロックするよりも、注意して値を読み取れるようにする方がよいでしょう。

于 2012-11-27T23:26:45.793 に答える