2017-01-17 2 views
0

Вот моя ситуация: я получил таблицу в базе данных, в следующем:UPDATE Ошибка 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 

И я хочу, чтобы обновить де колонки типа в соответствии с Serveral, если условия, но я получаю ошибка в строке 29:

mysql.connector.errors.InternalError: Unread result found

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

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

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 решатель снова :)

+0

Есть ли трассировка стека? Какая строка является ошибкой? – khelwood

+1

Я не думаю, что вы можете делать сразу два запроса на одном и том же «курсоре». Вы лучше материализуете результаты первого запроса (в 'list'), а затем запускаете второй запрос с помощью курсора. –

+0

ошибка исходит из строки 29 «curse.execute (« UPDATE ... »@ khelwood –

ответ

0

Вы должны прочитать все результаты, прежде чем делать еще одну операцию на том же cursor.

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

cursor.execute(query) 

results = list(cursor) 

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

Да, это было так! Но его обновление всего столбца типа, а не только того, где true, знаете ли вы, почему ? @gzc Спасибо –

+1

Просьба отметить этот ответ. Попробуйте 'cursor.execute (« UPDATE teste SET type =% s WHERE nome_imagem =% s », ['1', nome_imagem])'. – gzc

+0

«что-то» нужно чтобы быть nome_image для цикла в настоящее время читает, как это сделать? @ gzc –

Смежные вопросы