«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему последующие запросы в цикле Python возвращают одни и те же данные из базы данных MySQL?

Почему последующие запросы в цикле Python возвращают одни и те же данные из базы данных MySQL?

Опубликовано 10 ноября 2024 г.
Просматривать:368

Why Do Subsequent Queries in a Python Loop Return the Same Data from a MySQL Database?

Извлечение динамических данных из 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