Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Copy cursor object in Python

I am working on a Trac-Plugin...

To retrieve my data I create a cursor object and get the result table like this:

 db = self.env.get_db_cnx()
 cursor = db.cursor()
 cursor.execute("SELECT...") 

Now the result is being used in 3 different functions. My Problem is now that the cursor is being cleaned out while looping through the first time (like it is told here http://packages.python.org/psycopg2/cursor.html)

I then tried to copy the cursor object, but this failed too. the copy(cursor) function seems to have problem with a big dataset and the function deepcopy(cursor) fails anyway (according to this bug http://bugs.python.org/issue1515).

How can I solve this issue?

like image 433
CyrillC Avatar asked Apr 16 '12 13:04

CyrillC


1 Answers

Storing the values from any finite iterable is simple:

results = list(cursor)

Iterate over the iterable and store the results in a list. This list can be iterated over as many times as necessary.

You don't need a copy of the cursor, just a copy of the results of the query.

For this specific case, you should do what 9000 suggests in his comment -- use the cursors built-in functionality to get the results of a list, which should be as fast or faster than manually calling list.

like image 104
agf Avatar answered Oct 02 '22 22:10

agf