"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué las consultas posteriores en un bucle de Python devuelven los mismos datos de una base de datos MySQL?

¿Por qué las consultas posteriores en un bucle de Python devuelven los mismos datos de una base de datos MySQL?

Publicado el 2024-11-10
Navegar:578

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

Recuperar datos dinámicos de MySQL mediante consultas de Python

Al consultar periódicamente una base de datos MySQL que cambia rápidamente desde Python, es posible que espere una enfoque para obtener consistentemente los datos más recientes. Sin embargo, puede encontrar una situación en la que se devuelvan repetidamente los mismos datos.

Este problema se debe al nivel de aislamiento predeterminado de MySQL, REPEATABLE READ. Con este nivel, las lecturas dentro de una transacción utilizan una instantánea de los datos tal como existían al inicio de la transacción. Las consultas posteriores dentro de la misma transacción leerán esta instantánea en lugar de actualizarla.

Para resolver esto, debe confirmar la conexión después de cada consulta, asegurándose de que la siguiente transacción recupere los datos más recientes. Así es como puedes modificar tu 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)

Al agregar mydb.commit() después de cada consulta, obliga a MySQL a confirmar la transacción y actualizar la instantánea. Esto permite que consultas posteriores accedan a los datos más recientes.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3