psycopg2操作错误:游标不存在

2024-04-23 06:15:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图实现一个服务器端游标,以便在从数据库中获取大量数据时“绕过”Django ORM的弱点。 但我不明白如何定义命名游标,因为我当前的代码似乎无法正常工作。我是这样定义光标的:

id = 'cursor%s' % uuid4().hex
connection = psycopg2.connect('my connection string here')
cursor = connection.cursor(id, cursor_factory=psycopg2.extras.RealDictCursor)

游标似乎可以迭代并返回预期的记录作为python字典,但当我试图关闭它(cursor.close())时,出现异常:

psycopg2 OperationalError: cursor *the generated cursor id* does not exist

世界贸易基金会?!那么,我用什么对象从数据库中检索数据呢? 是不是psycopg2使用了回退默认(未命名)游标,因为我定义的游标在数据库中找不到(如果是的话。。。我的大问题是:在使用psycopg2之前,必须在db级别定义一个游标?)我很困惑,你能帮我吗?


Tags: 数据django代码id数据库定义服务器端orm
2条回答

从psycopg2文档中:

“命名游标通常是在不保留的情况下创建的,这意味着它们只与当前事务存在一段时间。当连接事务隔离级别设置为AUTOCOMMIT时,尝试在commit()之后从命名游标中提取或创建命名游标将导致异常。”

也就是说,这些游标不需要显式关闭。

http://initd.org/psycopg/docs/usage.html#server-side-cursors

我在玩我的模型和用Pytest启动测试时遇到了这个问题。

我解决问题的办法是重新设置测试单元的数据库。我用——像这样创建数据库:

pytest backend/test_projects/partners/test_actions.py --create-db

相关问题 更多 >