2017-01-17 3 views
0

Hier ist meine Situation: Ich habe eine Tabelle in einer Datenbank, wie folgend:UPDATE mysql Fehler mit 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 

Und ich will nach Runden de type Spalte aktualisieren, wenn die Bedingungen, aber ich bin immer ein Fehler in Zeile 29:

mysql.connector.errors.InternalError: Unread result found

ich bin mir ziemlich sicher, dass seine die Art und Weise im die Abfrage zu machen, und ich suchte bereits weitere Fragen zu diesem Thema, bevor diese eine Öffnung, aber ich konnte sie nicht ohnehin lösen.

EDIT 1: die Abfrage geändert und angewendet die Lösung durch GZC gab den Fehler loszuwerden, aber jetzt aktualisiert er die ganze Art Spalte statt nur die Fälle, in denen die wenn sie wahr ist

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() 

Was mache ich falsch?

Dank

EDIT 2: GZC Solver es wieder :)

+0

Gibt es einen Stack-Trace? Von welcher Linie kommt der Fehler? – khelwood

+1

Ich glaube nicht, dass Sie zwei Abfragen gleichzeitig auf demselben 'Cursor' ausführen können. Sie materialisieren besser die Ergebnisse der ersten Abfrage (in einer "Liste") und führen dann die zweite Abfrage mit dem Cursor aus. –

+0

der Fehler kommt aus der Zeile 29 "curse.execute (" UPDATE ... "@ @@ khelwood –

Antwort

0

Sie müssen alle Ergebnisse lesen, bevor eine weitere Operation auf dem gleichen cursor tun.

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

cursor.execute(query) 

results = list(cursor) 

for (nome_imagem, estado, type) in results: 
... 
+0

Yup das war es! Aber seine Aktualisierung der ganzen Typ Spalte und nicht nur die, wo das wenn wahr ist, wissen Sie, warum ? @gzc Vielen Dank –

+1

Bitte markieren Sie diese Antwort akzeptiert. Versuchen Sie 'cursor.execute (" UPDATE Test SET Typ =% s WHERE nome_image =% s ", ['1', nome_image)]. ' – gzc

+0

die' etwas 'braucht das nome_image zu sein, liest der Zyklus gerade, wie mache ich das? @ gzc –