Каковы компромиссы между повторным использованием курсора исоздаем новый курсор?

StackOverflow https://stackoverflow.com/questions/2035212

Вопрос

В cx_Oracle (или Oracle в целом) возможно ли выделить курсор для каждого запроса или повторно использовать курсор в нескольких запросах.

def getSomeData(curs):         # case 1: pass in a cursor, which is generally
    curs.execute('select ...') #         reused across queries
    return curs.fetchall()

def getSomeData(conn):         # case 2: pass in a connection,allocate
    curs=conn.cursor()         #         a cursor for this query
    curs.execute('select ...')
    return curs.fetchall()

Конечно, оба подхода возвращают одни и те же данные.

Каковы компромиссы между этими двумя подходами?Является ли один из них особенно более или менее эффективным?Существуют ли какие-либо потенциальные подводные камни при повторном использовании курсора по многим запросам?

Это было полезно?

Решение

Вы можете повторно использовать курсор cx_Oracle сколько угодно, без проблем.Если вы выполняете тысячи небольших запросов за небольшой промежуток времени, вы мог бы видите небольшое улучшение производительности при повторном использовании курсора, но я сомневаюсь в этом.

Иногда я буду создавать новые курсоры, а иногда повторно использовать существующий, в зависимости от того, облегчает ли это чтение и понимание кода.

Например, если у меня есть множество процедур, которым необходимо получить доступ к базе данных, я мог бы передать объект Oracle connection или курсор, созданный для этого соединения.

Я бы предпочел все, что делает ваш код более читаемым и простым в обслуживании.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top