gpt4 book ai didi

python - 如果记录数适中,pg8000 和 cursor.fetchall() 无法返回记录

转载 作者:行者123 更新时间:2023-11-29 12:45:30 25 4
gpt4 key购买 nike

我正在使用适配器 pg8000 通过以下代码读取数据库中的记录:

cursor = conn.cursor()
results = cursor.execute("SELECT * from data_" + country + " WHERE date >= %s AND date <= %s AND time >= %s AND time <= %s", (datetime.date(fromdate[0], fromdate[1], fromdate[2]), datetime.date(todate[0], todate[1], todate[2]),datetime.time(fromtime[0],fromtime[1]), datetime.time(totime[0],totime[1])))
results = cursor.fetchall()

当我选择一个包含 100 条记录的日期范围时,问题就出现了。它的记录数量不多,但足以引起以下问题,我看不出问题可能来自哪里——因为它似乎取决于带回的记录数量。例如:results = cursor.fetchall() 似乎工作正常并返回一个结果。

我得到的错误信息是:

File "/mnt/opt/Centos5.8/python-2.7.8/lib/python2.7/site-packages/pg8000/core.py", line 1650, in handle_messages
raise error
pg8000.errors.ProgrammingError: ('ERROR', '34000', 'portal "pg8000_portal_0" does not exist')

显然,尽管进行了探索,但我找不到解决此问题的方法。

使用 fetchmany() 时,结果如下:

results = cursor.fetchmany(100) 有效 - 限制为 100

results = cursor.fetchmany(101) 失败 - 与上面相同的错误

最佳答案

在自动提交模式下,您不能检索比 pg8000 缓存保留的行数更多的行(默认情况下为 100)。

我已经 made a commit这会在发生这种情况时提供更好的错误消息,这将出现在 pg8000 的下一个版本中。

原因是如果查询返回的行数大于pg8000缓存中的行数,数据库入口保持打开状态,然后当缓存为空时,从入口中获取更多的行.入口只能存在于事务中,因此在自动提交模式下,入口会在检索到第一批行后立即关闭。如果您尝试从门户检索第二批,您会收到问题中报告的“门户不存在”错误。

关于python - 如果记录数适中,pg8000 和 cursor.fetchall() 无法返回记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25120944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com