"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que as consultas subsequentes em um loop Python retornam os mesmos dados de um banco de dados MySQL?

Por que as consultas subsequentes em um loop Python retornam os mesmos dados de um banco de dados MySQL?

Publicado em 2024-11-10
Navegar:896

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

Recuperando dados dinâmicos do MySQL usando consultas Python

Ao consultar periodicamente um banco de dados MySQL em rápida mudança do Python, você pode esperar uma consulta baseada em loop abordagem para buscar consistentemente os dados mais recentes. No entanto, você pode encontrar uma situação em que os mesmos dados são retornados repetidamente.

Esse problema decorre do nível de isolamento padrão do MySQL, REPEATABLE READ. Com esse nível, as leituras em uma transação usam um instantâneo dos dados tal como existiam no início da transação. Consultas subsequentes dentro da mesma transação lerão esse instantâneo em vez de atualizá-lo.

Para resolver isso, você precisa confirmar a conexão após cada consulta, garantindo que a próxima transação recuperará os dados mais recentes. Veja como você pode modificar seu código 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)

Ao adicionar mydb.commit() após cada consulta, você força o MySQL a confirmar a transação e atualizar o instantâneo. Isso permite que consultas subsequentes acessem os dados mais recentes.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3