pyodbc возвращает несколько курсоров из хранимой процедуры с DB2 - PullRequest
1 голос
/ 01 сентября 2011

У меня есть программа на Python, которая вызывает хранимую процедуру из базы данных db2.Я использую results = cursor.fetchall() для обработки результатов моей хранимой процедуры.Однако моя хранимая процедура возвращает два курсора.results содержит только первый.Мне нужен способ перебрать столько курсоров, сколько я хочу.Я надеялся, что fetchmany() будет моим ответом, но это не так.

Мне ДЕЙСТВИТЕЛЬНО нужно иметь возможность делать несколько наборов результатов, поскольку программа, которую я пишу, может вызывать только одну хранимую процедуру.Чтобы вернуться назад и сделать так, чтобы можно было назвать два, потребовалось бы много времени.Кроме того, с помощью одной из этих вещей мне нужно вернуть 10 курсоров.Все динамично, поэтому приложение не знает, какую процедуру оно выполняет, оно просто получает данные и плюет в Excel, не зная смысла.Мне нужен один курсор для данных, а другие - для разных типов подсчетов и итогов.

Пожалуйста, помогите.Дайте мне знать, если вам нужна дополнительная информация, я не думал, что необходим сложный код, так как я ищу встроенную функцию для этого, или, возможно, даже другую библиотеку, потому что я выполнил свою часть поиска в Google, и похоже,pyodbc не делает этого для DB2.DB2 является требованием: (

Ответы [ 2 ]

6 голосов
/ 01 сентября 2011

Используйте метод nextset () для курсора: http://code.google.com/p/pyodbc/wiki/Cursor#nextset

Пример кода:

# fetch rows from first set
rows = cursor.fetchall()    
# process first set rows here

# advance to next result set
while (cursor.nextset()):    
    # fetch rows from next set, discarding first
    rows = cursor.fetchall()    
    # process next set rows here

nextset () вернет True, если доступны дополнительные наборы результатов, и последующий курсорметоды fetch будут возвращать строки из следующего набора.Метод возвращает None, если дополнительные наборы недоступны.

0 голосов
/ 19 августа 2016

Просто небольшое упрощение для записи:

while True:    
    rows = cursor.fetchall()
    # process all result sets in the same place
    if not cursor.nextset():
        break    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...