Урок 82. MySQL. Транзакции
⚡ Кратко: старый vs новый подход
- Кортежи от курсора →
DictCursorдля читаемости. - Ручной
commit()вместо надежды на автокоммит. - Транзакция с
rollback()вместо частичных изменений при ошибке.
⚖️ Старый vs Новый подход
1. Доступ к строкам: кортеж vs DictCursor
По умолчанию строки возвращаются как кортежи. Это компактно, но легко ошибиться с порядком индексов, особенно если колонок много.
| Старый подход | Новый подход |
|---|---|
|
|
Вывод: DictCursor делает код понятнее и снижает риск ошибок при изменении порядка колонок в запросе.
2. Сохранение изменений: надежда на автокоммит vs явный commit()
В PyMySQL по умолчанию автокоммит отключён. Если не вызвать commit(), изменения будут потеряны при закрытии соединения.
| Старый подход | Новый подход |
|---|---|
|
|
Вывод: всегда вызывай commit() после INSERT, UPDATE, DELETE.
⚠️ Проверить по документации: в PyMySQL по умолчанию
autocommit=False. Если включить autocommit=True, каждый запрос будет фиксироваться сразу, но тогда теряется контроль над транзакциями.
3. Обработка ошибок: без отката vs rollback()
Если в последовательности изменений произойдёт ошибка, без rollback() часть изменений останется в базе, а часть — нет. Это нарушает целостность данных.
| Старый подход | Новый подход |
|---|---|
|
|
Вывод: группируй связанные изменения в транзакцию и откатывай её при ошибке.