Что компромиссы многократного использования являются курсором по сравнению с созданием нового курсора?

В 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()

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

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

14
задан Jeffrey Kemp 1 December 2017 в 01:31
поделиться

1 ответ

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

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

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

Все, что делает ваш код более читаемым и легче поддерживать, это то, на что я бы пошел.

10
ответ дан 1 December 2019 в 15:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: