2012-06-13 53 views
2

我使用pyodbc查詢從SQL Server數據,然後在pandas就可以進行操作。我注意到一些計算的數字列以decimal.Decimal形式返回,其他以float形式返回。這是有問題的,因爲算術操作數不能對兩種不同類型的結果執行。Pyodbc默認類型數字

什麼是解決這個問題的最好方法?是否有pydobc設置強制decimal.Decimal浮動?我應該自己做轉換嗎?還有別的嗎?

回答

2

Here是細節ODBC和Python數據類型之間的轉換轉換表(下Results爲Python 2.x和3.x標題)。

無論CAST在@亞倫的答覆中提到,或更改數據庫中的源數據類型的結果。

對於一些更詳細(具體列數據類型,樣本數據的數據庫更改的靈活性),我們可以幫助決定哪些選項是最好的。

+1

數據庫模式有點混亂,小數,數字和浮點數全部交替使用,沒有太多可以解釋的押韻。我結束了將十進制數字浮在python一側。對我來說,長期的解決方案是修改我在pyodbc和business之間的中間庫,以便有一個強制小數和數字浮動的選項(也可能是其他類型)。 – Roger

1

如果你寫的查詢我建議只使用CAST來控制數據類型。我總是明確地轉換計算列在SQL Server

SELECT CAST(ColumnA/ColumnB AS FLOAT) AS 'FieldA' FROM Table 
+0

我考慮這樣做,但SQL查詢是醜陋的,因爲他們已經無需再添加代碼適應客戶端庫。應該真的有解決方案,您執行一次客戶端上的每個查詢,也許包裝execute()爲您做到這一點。 – Roger