centos pyodbc值错误:月份必须在1到12之间

sh7euo9m  于 2022-11-07  发布在  其他
关注(0)|答案(2)|浏览(155)

我在Windows10(主机操作系统)和CentOS Docker映像中安装了pyodbc。在Windows10中,它按预期工作,但它在Docker映像上抛出了一个错误。ValueError: month must be in 1..12

import pyodbc
conn = pyodbc.connect('DSN=db2; UID=myid; PWD=mypwd')
cursor = conn.cursor()
cursor.execute('select * from mydb.atable')
rows = cursor.fetchall()

Windows 10:主机操作系统
Python3.7.4
pyodbc4.0.27
CentOS7:扩展插件映像
Python3.6.8
pyodbc4.0.30
这是我的文档,

FROM centos7

RUN yum -y update
RUN yum install -y python3
RUN pip3 install --upgrade pip
RUN pip3 install wheel
RUN yum install -y python36-devel
RUN yum install -y libevent-devel
RUN yum install -y gcc-c++

我是否错过了在centos上安装任何开发工具?

au9on6nz

au9on6nz1#

我在另一个没有Docker的Linux上也遇到了同样的问题。同样的Python版本,同样的pyodbc版本。在使用pyodbc 3.0.10时也发生了同样的问题。
数据库:Sybase ASE,操作系统:红帽企业Linux服务器7.8版(Maipo)

如果您的结果集包含时间戳,请尝试以下操作:

一位同事创建了此修补程序,但目前希望保持匿名。https://github.com/pucgenie/pyodbc/pull/1
基本上,驱动程序提供了一个指向SQLLEN的指针,然后只填充32位。pyodbc无法检测到(-1)代表的是(2^32 -1)。该补丁为0x 00000000 FFFFFFFF添加了一个丑陋的异常处理。

gfttwv5a

gfttwv5a2#

多亏了@Johannes解决方案,阅读代码更改使我能够进一步探索问题。
在ODBC驱动程序中,您可以选择sqllen 4或sqllen 8驱动程序。我发现在/etc/odbcinst. ini中选择sqllen 8驱动程序可以使问题消失。
这里有一些关于这个问题的文档:http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc20116.1570/html/aseodbc/aseodbc5.htm

-rwxr-xr-x 1 1000 1034 5185504 Apr  8 09:23 libsapcrypto.so
-rwxr-xr-x 1 1000 1034 5413262 Apr  8 09:23 libsapssfs.so
-rwxr-xr-x 1 1000 1034  499679 Apr  8 09:23 libslcryptokernel.so
-rwxr-xr-x 1 1000 1034     166 Apr  8 09:23 libslcryptokernel.so.sha256
-rwxr-xr-x 1 1000 1034 3645535 Apr  8 08:16 libsybdrvodb-sqllen4.so  # <- don't use this one
-rwxr-xr-x 1 1000 1034 3454884 Apr  9 03:30 libsybdrvodb-sqllen4.so.fbo
-rwxr-xr-x 1 1000 1034 3655680 Apr  8 09:23 libsybdrvodb-sqllen8.so  # <- use this one
lrwxrwxrwx 1 1000 1034      25 Aug  7 04:44 libsybdrvodb.so -> ./libsybdrvodb-sqllen4.so
drwxrwxr-x 5 1000 1034    4096 Aug  7 04:44 locales

相关问题