Каковы компромиссы между повторным использованием курсора исоздаем новый курсор?
Вопрос
В 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 или курсор, созданный для этого соединения.
Я бы предпочел все, что делает ваш код более читаемым и простым в обслуживании.