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.
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