Извлечение динамических данных из MySQL с помощью запросов Python
При периодическом запросе быстро меняющейся базы данных MySQL из Python можно ожидать, что подход для последовательного получения последних данных. Однако вы можете столкнуться с ситуацией, когда одни и те же данные возвращаются повторно.
Эта проблема связана с уровнем изоляции MySQL по умолчанию, REPEATABLE READ. На этом уровне при чтении внутри транзакции используется снимок данных в том виде, в котором они существовали в начале транзакции. Последующие запросы в рамках одной транзакции будут считывать этот снимок, а не обновлять его.
Чтобы решить эту проблему, вам необходимо фиксировать соединение после каждого запроса, гарантируя, что следующая транзакция получит самые последние данные. Вот как вы можете изменить свой код Python:
# Main loop
while True:
# SQL query
sql = "SELECT * FROM table"
# Read the database, store as a dictionary
mycursor = mydb.cursor(dictionary=True)
mycursor.execute(sql)
# Store data in rows
myresult = mycursor.fetchall()
# Transfer data into list
for row in myresult:
myList[int(row["rowID"])] = (row["a"], row["b"], row["c"])
print(myList[int(row["rowID"])])
# Commit !
mydb.commit()
print("---")
sleep (0.1)
Добавляя mydb.commit() после каждого запроса, вы заставляете MySQL фиксировать транзакцию и обновлять снимок. Это позволяет последующим запросам получать доступ к самым свежим данным.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3