2012-11-23 25 views
0

我使用python,sqlalchemy和pymssql連接到專有的MSSQL數據庫。數據庫不能編輯,我只需要從中讀取數據。現在我的程序在第一次運行數據庫查詢時吐出了這條消息。使用pymssql訪問小數位

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的說話我和它意味着,當我從類型十進制的一個字段讀出的數據,它會被轉換爲浮點數並在該過程倒圓。

所以我對這個兩個問題...

首先,在Linux機器上是否有一種方式來獲得從MSSQL數據庫十進制數據沒有這個問題?

其次,爲什麼程序打印此消息而不是崩潰或引發異常?如果我能應付這個小小的錯誤,那麼我該如何阻止這個消息不停地向我吐口水呢?

回答

2

是的。使用pyodbc(free/OSS)或mxodbc(商業版,僅在最新的mxodbc中使用0.8中的mxodbc)方言,它們已經過測試,可以完全精確地傳遞DECIMAL對象。 pymssql目前是一個未知數,因爲這個DBAPI經歷了許多重寫/所有權變更,並且其狀態在空中稍微有些提升。

另外,警告是因爲你的可以將取回小數點對象,它們只會受到通常的浮點奇怪(如3.456返回爲3.4559999999999類型的東西)。所以更好地允許讀取警告值而不是阻止其他部分工作的功能。

+0

謝謝@zzzeek,對於延遲抱歉。我現在有pyodbc的問題,並會發佈一個相關的問題,儘快。 –