我试图实现一个服务器端游标,以便在从数据库中获取大量数据时“绕过”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级别定义一个游标?)我很困惑,你能帮我吗?
从psycopg2文档中:
“命名游标通常是在不保留的情况下创建的,这意味着它们只与当前事务存在一段时间。当连接事务隔离级别设置为AUTOCOMMIT时,尝试在commit()之后从命名游标中提取或创建命名游标将导致异常。”
也就是说,这些游标不需要显式关闭。
http://initd.org/psycopg/docs/usage.html#server-side-cursors
我在玩我的模型和用Pytest启动测试时遇到了这个问题。
我解决问题的办法是重新设置测试单元的数据库。我用——像这样创建数据库:
相关问题 更多 >
编程相关推荐