【问题标题】:pyodbc ValueError: month must be in 1.. 12pyodbc ValueError: 月份必须在 1.. 12
【发布时间】:2020-09-14 21:12:36
【问题描述】:

我在 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

这是我的 dockerfile,

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 上安装任何开发工具吗?

【问题讨论】:

  • 我在另一个没有 docker 的 Linux 上也遇到了同样的问题。相同的 Python 版本,相同的 pyodbc 版本。它也发生在使用 pyodbc 3.0.10 数据库:Sybase ASE,操作系统:Red Hat Enterprise Linux Server release 7.8 (Maipo) 大约两周前开始出现故障。
  • @Johannes 你解决了吗?
  • 我正在准备拉取请求并创建详细的问题报告。

标签: python centos odbc pyodbc


【解决方案1】:

我在另一个没有 docker 的 Linux 上遇到了同样的问题。相同的 Python 版本,相同的 pyodbc 版本。使用 pyodbc 3.0.10 时也会发生这种情况。

数据库:Sybase ASE,操作系统:Red Hat Enterprise Linux Server 7.8 版 (Maipo)

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

一位同事创建了此补丁,但目前希望保持匿名。 https://github.com/pucgenie/pyodbc/pull/1

基本上,驱动程序提供了一个指向 SQLLEN 的指针,然后只填充 32 位。 pyodbc 无法检测到 (-1) 是指 (2^32 -1)。该补丁为 0x00000000FFFFFFFF 添加了一个丑陋的异常处理。

【讨论】:

    【解决方案2】:

    感谢@Johannes 的解决方案,通读代码更改让我能够进一步探索问题。

    在 ODBC 驱动程序中,您可以选择 sqllen8 或 sqllen8 驱动程序。我发现在 /etc/odbcinst.ini 中选择 sqllen8 驱动程序可以解决问题。

    这里有一些关于此事的文档: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
    

    【讨论】:

      猜你喜欢
      • 2020-07-26
      • 2017-12-28
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 2018-02-22
      • 1970-01-01
      • 2022-01-04
      相关资源
      最近更新 更多