Select orthographic mistake with the mouse pointer and press Ctrl+Enter. Let’s make our language cleaner!
Якщо помітите помилку на цій сторінці, будь ласка, виділіть її вказівником миші та натисніть Ctrl+Enter. Зробімо наше мовлення чистішим!

2008-10-09

Закривайте транзакції!

Переробили деякий пітонівський скрипт, він став рідше робити зміни і проявилася несподівана проблема: при переконфігурації він наполегливо відмовлявся бачити зовнішні зміни. Тобто, хтось зовні змінює параметр, а скрипт геть ігнорує ці нововведення.

Несподівано для себе зробив відкриття, що в межах транзакції результат вибірки завжди один і той самий (для одного запиту):

mysql> start transaction;
mysql> select * from table; -- якийсь результат
mysql> -- в цей час хтось змінює записи таблиці table
mysql> select * from table; -- повертає початкову вибірку без змін
mysql> commit;
mysql> select * from table; -- тепер вже видно зміни з іншої транзакції

А почалася ця проблема саме через розширення пітона MySQLdb. Він автоматично для нового з’єднання починає нову транзакцію, а закрити її пропонує самостійно викликом

conn.commit()

Саме його й бракувало у коді після вибору з бази даних…

Немає коментарів: