Хронически устаревшие результаты с использованием MySQLdb в Python

Моя программа Python запрашивает набор таблиц в базе данных MySQL, засыпает 30 секунд, затем снова запрашивает их и т. Д. Рассматриваемые таблицы постоянно обновляются третьей стороной, и (очевидно) я хотел бы видеть новые результаты каждые 30 секунд.

Допустим, мой запрос выглядит так:

"select * from A where A.key > %d" % maxValueOfKeyFromLastQuery

Я регулярно вижу, что моя программа перестает находить новые результаты после одной или двух итераций, даже если новые строки присутствуют в таблицах . Я знаю, что в таблицах присутствуют новые строки, потому что я могу их видеть, когда я выдаю идентичный запрос из интерактивного mysql (т.е. не из Python).

Я обнаружил, что проблема исчезнет в Python, если я разорву свое соединение с базой данных после каждого запроса, а затем установить новый для следующего запроса.

Я подумал, что это может быть проблема кеширования на стороне сервера, как обсуждается здесь: Явное отключение кеша запросов MySQL в некоторых частях программы

Однако:

  1. Когда я проверяю интерактивную оболочку mysql, она говорит это кеширование включено. (Итак, если это проблема кеширования, почему интерактивная оболочка не страдает от этого?)

  2. Если я явно выполняю SET SESSION query_cache_type = OFF из моей программы Python, проблема все равно возникает .

Создание нового соединения с БД для каждого запроса - единственный способ решить эту проблему.

Как я могу получить свои запросы из Python, чтобы увидеть новые результаты, о которых я знаю?

22
задан Community 23 May 2017 в 12:34
поделиться

1 ответ

Вы можете включить автоматическую фиксацию автоматически в MySQLdb! Попробуйте следующее:

conn = MySQLdb.Connect("host", "user", "password")
conn.autocommit(True)

Это дает вам то же поведение, к которому вы привыкли в интерактивной оболочке.

9
ответ дан 29 November 2019 в 04:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: