问题描述
我正在将以前在 Windows 10 上运行的应用程序移动到具有 python3.6 linux 基础映像的 docker 容器。必要的更改之一是将 sql 连接字符串中使用的驱动程序从“sql Server”更改为 sql Server 的 ODBC 驱动程序 17,因为我必须使用 unixodbc-dev。我通过 Dockerfile 安装了 msodbcsql17 和 mssql-tools,并通过 sqlalchemy 引擎执行查询,该引擎从 sql 类型“日期”的列中检索值。使用 sql Server 驱动程序,这些日期将转换为字符串(这是代码所期望的),但使用 sql Server 的 ODBC 驱动程序 17,它们将作为日期返回。我正在使用 pyodbc==4.0.25 和 sqlAlchemy==1.3.5。
解决方法
自 SQL Server 2000 以来,旧的“SQL Server”ODBC 驱动程序没有得到增强,早在 SQL Server 2008 引入较新的日期数据类型(和其他时间类型)之前很久。驱动程序将返回无法识别的类型作为字符串原生类型。
如果原生类型是应用代码的重大更改,正确的解决方案是在应用代码和更新的驱动程序中使用正确的类型。您所能做的就是在此期间使用旧版驱动程序。