我在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上安装任何开发工具?
2条答案
按热度按时间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添加了一个丑陋的异常处理。
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