【问题标题】:pyodbc fetchall() returns no results when a column returned by the query contains too much data当查询返回的列包含太多数据时,pyodbc fetchall() 不返回任何结果
【发布时间】:2014-08-25 20:22:13
【问题描述】:

设置:我在 Windows 2012 客户端上使用 Python 3.3。 我有一个使用 pyodbc 运行的选择查询,它没有通过 fetchall() 返回任何结果。我知道查询工作正常,因为我可以将其取出并从 Microsoft SQL Management Studio 运行它而不会出现任何问题。
我还可以从选择列表中删除一列,查询将返回结果。对于有问题的数据库行,此列包含大量 XML 数据(> 10,000 个字符),因此似乎存在一些缓冲区溢出问题导致 fetchall() 失败,尽管它没有抛出任何异常.我试过用谷歌搜索,我看到了关于提高缓冲区大小的配置选项的传言,但我无法确切地确定如何做到这一点,或者解决方法是什么。

是否有我可以使用的配置选项,或者 pyodbc 的任何替代方案。

免责声明:我现在只使用 python 大约 2 周,所以我 我仍然是菜鸟,尽管我已经尽一切努力研究 我的问题彻底被证明是难以捉摸的:

顺便说一句,我尝试使用 odbc 而不是 pyodbc,但相同的查询会引发这个奇怪的错误,谷歌也没有帮助我解决

[ERROR] 执行 Select 查询时出现异常:[][Negative size passing to PyBytes_FromStringAndSize]

【问题讨论】:

  • 您使用的是什么操作系统和堆栈?如果在 Linux 上,您是否将 FreeTDS / unixODBC 与 pyodbc 一起使用?
  • 我在 Windows 2012 上。不确定您所说的堆栈是什么意思。
  • 无法在使用 Python 3.4.1 和 SQL Server Native Client 11.0 的 Windows 7 64 位上重现。正在使用什么 ODBC 驱动程序和版本?发布产生错误的代码。
  • 好吧,我没有发布任何具体的内容,因为它似乎是特定于数据的。如果没有数据库中的相应数据,给出查询将无济于事。但是,我在连接字符串中使用 SQL Server Native Client 11.0。我会看看我是否可以挑选一些文章在原始问题中发布
  • 我使用AdventureWorks2008R2数据库,Production.Illustration表尝试重现。该表中的Diagram 列包含大于10,000 个字符的XML 类型数据。您可能想尝试从该示例数据库中重现问题。

标签: python-3.x pyodbc


【解决方案1】:

看来这个问题是通过更改我的 SQL 连接字符串解决的

来自:

DRIVER={SQL Server Native Client 11.0}

到:

DRIVER={SQL Server}

【讨论】:

    猜你喜欢
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    相关资源
    最近更新 更多