为什么 SQL 服务器的 ODBC 驱动程序 17 会自动将字符串转换为日期,我该如何阻止它?
Why is ODBC Driver 17 for SQL Server converting strings to dates automatically and how can I stop this?
我正在将之前 运行 在 windows 10 上的应用程序移动到具有 python3.6 linux 基本映像的 docker 容器。一项必要的更改是将 sql 连接字符串中使用的驱动程序从“SQL 服务器”更改为 SQL 服务器的 ODBC 驱动程序 17,因为我必须使用 unixodbc-dev。我通过我的 Dockerfile 安装了 msodbcsql17 和 mssql-tools,并通过 sqlalchemy 引擎执行查询,该引擎从 sql 类型的列中检索值“日期”。使用 SQL 服务器驱动程序,这些日期会转换为字符串(这是代码所期望的),但对于 SQL 服务器的 ODBC 驱动程序 17,它们将作为日期返回。我正在使用 pyodbc==4.0.25 和 SQLAlchemy==1.3.5.
遗留的“SQL Server”ODBC 驱动程序自 SQL Server 2000 以来就没有得到增强,远早于 [=15 引入了较新的日期数据类型(和其他时间类型) =] Server 2008。驱动程序将 return 无法识别的类型作为字符串而不是本机类型。
如果本机类型是应用代码的重大更改,正确的解决方案是在应用代码和更新的驱动程序中使用正确的类型。您所能做的就是在过渡期间使用旧版驱动程序。
我正在将之前 运行 在 windows 10 上的应用程序移动到具有 python3.6 linux 基本映像的 docker 容器。一项必要的更改是将 sql 连接字符串中使用的驱动程序从“SQL 服务器”更改为 SQL 服务器的 ODBC 驱动程序 17,因为我必须使用 unixodbc-dev。我通过我的 Dockerfile 安装了 msodbcsql17 和 mssql-tools,并通过 sqlalchemy 引擎执行查询,该引擎从 sql 类型的列中检索值“日期”。使用 SQL 服务器驱动程序,这些日期会转换为字符串(这是代码所期望的),但对于 SQL 服务器的 ODBC 驱动程序 17,它们将作为日期返回。我正在使用 pyodbc==4.0.25 和 SQLAlchemy==1.3.5.
遗留的“SQL Server”ODBC 驱动程序自 SQL Server 2000 以来就没有得到增强,远早于 [=15 引入了较新的日期数据类型(和其他时间类型) =] Server 2008。驱动程序将 return 无法识别的类型作为字符串而不是本机类型。
如果本机类型是应用代码的重大更改,正确的解决方案是在应用代码和更新的驱动程序中使用正确的类型。您所能做的就是在过渡期间使用旧版驱动程序。