pyodbc Курсор Повторное использование - PullRequest
2 голосов
/ 18 января 2012

Я делаю несколько запросов к моей БД из своего кода Python, который использует pyodbc для подключения к SQL Server.

cursor = connection.connect(connection_string)
qry1 = "Select * FROM Table1"

rows = cursor.execute(qry1).fetchall()

for row in rows:
   qry2 = "Select * FROM Table2"

   rows2 = cursor.execute(qry2).fetchall()

   for row2 in rows2:
      print row2

Это работает и успешно проходит оба запроса до завершения.

Как я могу повторно использовать объект курсора?

Я бы подумал, когда я бегу

rows2 = cursor.execute(qry2).fetchall()

Что rows и rows2 теперь будут указывать на одно и то же (объект).

РЕДАКТИРОВАТЬ: полезная информация с сайта pyodbc

Так как это читает все строки в память, его не следует использовать, если строк много. Попробуйте вместо этого перебирать строки. Однако это полезно для освобождения курсора, чтобы можно было выполнить второй запрос перед обработкой полученных строк.

информация курсора

1 Ответ

1 голос
/ 18 января 2012

Я думаю, что ваше последнее утверждение неверно, так как .fetchall() возвращает новый список, содержащий все строки, возвращаемые запросом курсоров, после чего вы можете повторно использовать курсор. (но я бы проверил стоимость нового курсора, прежде чем подумать о его повторном использовании.) [ну, я не знаю, правда ли это, но это для dbapi-совместимых привязок sqlite3]

...