【问题标题】:Pyodbc default types for numbersPyodbc 数字的默认类型
【发布时间】:2023-11-07 10:12:01
【问题描述】:

我正在使用 pyodbc 从 SQL Server 查询数据,然后在 pandas 中对其执行操作。我注意到的是,一些计算出来的数字列以十进制返回。十进制,而另一些则以浮点数形式返回。这是有问题的,因为算术操作数不能对两种不同类型的结果执行。

解决问题的最佳方法是什么?是否有 pydobc 设置强制十进制。十进制浮动?我应该自己进行转换吗?还有什么?

【问题讨论】:

    标签: python sql-server types pyodbc pandas


    【解决方案1】:

    Here 是转换表(在 Python 2.x 和 3.x 的 Results 标题下),详细说明了 ODBC 和 Python 数据类型之间的转换。

    CAST@Aaron 的回答中提到的结果,或者更改数据库中的源数据类型。

    有了更多详细信息(特定列数据类型、示例数据、数据库更改的灵活性),我们可以帮助确定最佳选择。

    【讨论】:

    • 数据库架构有点混乱,十进制、数字和浮点数都可以互换使用,没有太多我可以破译的押韵。我最终将十进制转换为在 python 端浮动。对我来说,长期的解决方案是修改我在 pyodbc 和 business 之间拥有的中间库,以便可以选择强制小数和数字浮动(可能还有其他类型)。
    【解决方案2】:

    如果您编写了查询,我建议您只使用CAST 来控制数据类型。我总是在 SQL Server 中显式转换计算列

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

    【讨论】:

    • 我考虑过这样做,但是 sql 查询很难看,因为它们已经不需要添加代码来适应客户端库。确实应该有一个解决方案,您在客户端上的每个查询都执行一次,也许包装 execute() 为您执行此操作。
    最近更新 更多