Python + MySQLdb — зачем курсоры?

Столкнулся с тем, что в mysqldb есть два варианта работы — напрямую через объект db, возвращаемый MySQLdb.connect():
db.query(..)
# ...

db.store_result(..)


и через курсор:
cursor = db.cursor()

cursor.execute(..)

cursor.fetchall() 
# и т.д.


Зачем это и что предпочтительнее использовать?
  • Вопрос задан
  • 5925 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Norraxx
Да потому, что этот «курсор» и полюбому используется, только без вашего ведома. Не знаю как он там создаётся или нет, но просто это уже от вас огорожено.
Курсор (Cursor) как таково возващает запросы как лист таплов [(,...),...], но можно возвращать результаты как dict() (DictCursor), или поразному манипулировать с местом в памяти (CursorStoreResultMixIn, CursorUseResultMixIn). Также есть и курсоры на серверной стороне (SSCursor, SSDictCursor), как работают — не знаю, но в мануале написанно: «Use only if you are dealing with potentially large result sets.».

Если не хотите гемороить себе мозги что да как работает, используйте один курсор, хотябы потому, что это чище.
Ответ написан
@equand
Еще курсоры хороши, т.к. они по идее должны быть interchangeable с другими драйверами БД, то есть бизнес-логику для смены с mysql на postgresql и т.п. не так сложно перевести (факт, переводили, sed заменил пару транзакционных вещей и специфичных постгресу, а так все работало отлично).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы