Обновление ошибки mysql с Python

Вот моя ситуация:
Я получил таблицу на базе данных, как показано ниже:

nome_imagem                       estado     type
57260-tracker-_tracker_face     awake       0
57261-tracker-_tracker_face     drowsiness  1
57268-tracker-_tracker_face     noface      2
57289-tracker-_tracker_face     distracted  3
57290-tracker-_tracker_face     awake       1
57291-tracker-_tracker_face     drowsiness  2
57293-tracker-_tracker_face     noface      3

И я хочу обновить столбец типа de в соответствии с условиями serveral if, но я получаю ошибку в строке 29:

mysql.соединитель.ошибки.InternalError: найден непрочитанный результат

Я уверен, что это способ, которым я делаю запрос, и я уже искал другие вопросы об этом, прежде чем открыть этот, но я не мог решить его в любом случае.

EDIT 1: изменил запрос и применил решение, предоставленное gzc, чтобы избавиться от ошибки, но теперь он обновляет все столбцы типа, а не только случаи, когда if имеет значение true

import mysql.connector
from mysql.connector import errorcode
import os

cnx = mysql.connector.connect(user='root', database='empresa')
cursor = cnx.cursor()


fileDir = os.path.dirname(os.path.realpath(__file__))
textDir = os.path.join(fileDir, "test_img")


query = ("SELECT nome_imagem, estado, type FROM alertas ")

cursor.execute(query)
results = list(cursor)

for (nome_imagem, estado, type) in results:
  print nome_imagem, estado

  my_file_name = nome_imagem+'.txt' 
  my_file = open("test_img/"+my_file_name, 'r')
  content = my_file.readline()
  status = content.strip().split()[-1].split("=")[1]
  face = content.strip().split()[0].split("=")[1]
  print status, face #1 tem face, 0 nao tem

  if (face == '1' and estado == status): #se tem cara e o estado que tem na bd for igual ao estado que o programa classificou = correto
    print "correto"
    cursor.execute("UPDATE alertas SET type='1' WHERE nome_imagem=nome_imagem")
  if (face == '1' and estado == 'drowsiness' and status == 'awake') or (face == 1 and estado == 'awake' and status == 'drowsiness'): #verificar isto
    print "trocado"
  if (estado != '' and face == '0'): # se tiver estado mas nao tiver cara classifico logo como errado 3
    print "errado"
  if (estado == 'distracted' and face == '1'): # se tem cara mas for distracted deixo normal pois nao consigo classificar
    print "normal"



cursor.close()
cnx.close()

Что я делаю не так?

Спасибо

EDIT 2: gzc solver it again 🙂

1 ответ

  1. Вы должны прочитать все результаты перед выполнением другой операции на том же cursorсамом .

    ...
    query = ("SELECT nome_imagem, estado, type FROM alertas ")
    
    cursor.execute(query)
    
    results = list(cursor)
    
    for (nome_imagem, estado, type) in results:
    ...