在Python中复制游标对象

Cyr*_*llC 4 python cursor deep-copy

我正在研究一个Trac-Plugin ......

要检索我的数据,我创建一个游标对象并获取结果表,如下所示:

 db = self.env.get_db_cnx()
 cursor = db.cursor()
 cursor.execute("SELECT...") 
Run Code Online (Sandbox Code Playgroud)

现在结果被用于3种不同的功能.我的问题是现在光标在第一次循环时被清理掉了(就像在http://packages.python.org/psycopg2/cursor.html这里说的那样)

然后我尝试复制光标对象,但这也失败了.该copy(cursor)函数似乎有一个大数据集的问题,并且该函数deepcopy(cursor)无论如何都会失败(根据这个错误http://bugs.python.org/issue1515).

我该如何解决这个问题?

agf*_*agf 14

存储任何有限迭代的值很简单:

results = list(cursor)
Run Code Online (Sandbox Code Playgroud)

迭代迭代并将结果存储在列表中.该列表可以根据需要重复多次.

您不需要光标的副本,只需要查询结果的副本.

对于这种特定情况,您应该执行9000在其注释中建议的内容 - 使用游标内置功能来获取列表的结果,该列表的结果应该比手动调用快或快list.

  • 或者,可以显式调用`cursor.fetchall()`并获取元组列表. (4认同)