Программа My Python запрашивает набор таблиц в БД MySQL, засыпает в течение 30 секунд, затем запрашивает их снова и т.д. Указанные таблицы постоянно обновляются сторонними, и (очевидно) я хотел бы видеть новые результаты каждые 30 секунд.
Скажем, мой запрос выглядит так:
"select * from A where A.key > %d" % maxValueOfKeyFromLastQuery
Регулярно я увижу, что моя программа перестает находить новые результаты после одной или двух итераций, даже если новые таблицы присутствуют в таблицах. Я знаю, что новые строки присутствуют в таблицах, потому что я вижу их, когда я выдаю идентичный запрос из интерактивного mysql (т.е. Не из Python).
Я обнаружил, что проблема пропадает в Python, если я завершаю свое соединение с базой данных после каждого запроса, а затем устанавливаю новый для следующего запроса.
Я подумал, может быть, это может быть проблема кэширования на стороне сервера, как обсуждалось здесь: Явное отключение кеша запросов MySQL в некоторых частях программы
Однако:
-
Когда я проверяю интерактивную оболочку mysql, он говорит, что кеширование включено. (Итак, если это проблема кэширования, как интерактивная оболочка не страдает от нее?)
-
Если я явно выполняю
SET SESSION query_cache_type = OFF
из моей программы Python, проблема все равно возникает.
Создание нового соединения с БД для каждого запроса - единственный способ, с помощью которого я мог решить проблему.
Как я могу получить свои запросы от Python, чтобы увидеть новые результаты, которые, как я знаю, есть?