【问题标题】:python buffer size when querying Vertica using Pyodbc使用 Pyodbc 查询 Vertica 时的 python 缓冲区大小
【发布时间】:2023-11-28 14:42:01
【问题描述】:

我正在使用 pyodbc 连接到 Vertica DB,然后我正在使用游标执行查询,但查询的结果包含一个巨大的文本字段,执行运行但它从不返回任何内容,甚至没有异常。当我在 row=cursor.fetchall() 调试和断点时,我可以看到这一点 它就像这样“[]”

如果我尝试在这个巨大的文本字段中使用另一个字符较少的数据集,则执行运行并获得数据。我怀疑它与检索数据时的缓冲区大小有关,但我不知道。关于如何做到这一点的任何建议?也许以某种方式增加缓冲区大小?

谢谢

import requests, pypyodbc, json, pyvertica, pyodbc
from pyvertica import connection
    conn=pyodbc.connect("DSN=HPVertica;UID=muffin;PWD=muffin")
    cursor=conn.cursor()
    query="SELECT field1_int, field2_bigText  FROM someTable WHERE field1_int=103;"

    try:
        cursor.execute(query)
    except Exception as e:
        print('err: {}'.format(e.args[0]))
        print(': {}'.format(e.args[1]))

    row=cursor.fetchall()

【问题讨论】:

    标签: python buffer pyodbc vertica


    【解决方案1】:

    我相信这是 pyodbc 中的一个已知问题,至少我确信我之前已经看到过这个问题以及一些随机补丁。我刚刚查看了 pyodbc 代码,看起来他们最近在几周前在this commit 中解决了这个问题。

    它似乎不在 3.0.10 的最新(截至本文)标签中。您要么必须尝试最先进的技术,要么再等一会儿,以便将其包含在未来的标签中。 (我猜,或者根据那个提交自己修补它)。

    【讨论】:

    • 该死,太糟糕了 =( 你知道是否有另一个库可以用来代替 pyodbc 吗?
    • 您可以使用优步的vertica-python。我已经成功了。
    • 您还可以使用子字符串或其他东西将大字符串拆分为选择中的多个字段(每个字段可能低于 4k 字节),然后将它们连接到客户端作为短期解决方法。
    【解决方案2】:

    我使用 pypyodbc 而不是 pyodbc 解决了这个问题,不再出现缓冲区错误

    【讨论】:

      最近更新 更多