Consultas no MySQL do Python produzindo dados idênticos
Consultar repetidamente um banco de dados MySQL do Python para recuperar dados dinâmicos representa um desafio. Sabe-se que apenas iterar uma consulta em um loop não é suficiente para buscar dados novos do banco de dados.
Seu código fornecido exemplifica esse problema:
for i in range(listSize):
#...
mycursor = mydb.cursor(dictionary=True)
mycursor.execute(sql)
#...
Mesmo com tentativas de usar fetchall, fetchmany e fetchone, os resultados permanecem estagnados.
A solução: confirmando a conexão
Para resolver isso, cada execução de consulta deve ser seguida por um commit da conexão. Esta ação conclui a transação em andamento e inicia uma nova, permitindo que a consulta subsequente detecte alterações feitas durante a transação anterior.
while True:
#...
mycursor = mydb.cursor(dictionary=True)
mycursor.execute(sql)
#...
mydb.commit()
#...
Níveis de isolamento e o padrão REPEATABLE READ
Este conceito está enraizado em níveis de isolamento. Por padrão, o MySQL emprega REPEATABLE READ para InnoDB. Isto implica que dentro de uma transação, as leituras subsequentes reterão o instantâneo estabelecido pela leitura inicial da transação. Portanto, sem confirmação, as consultas subsequentes não capturarão nenhuma alteração.
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