2012-06-13 96 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