#python #python-3.x #opencv #face-recognition #mysql-connector-python
#python #python-3.x #opencv #распознавание лиц #mysql-соединитель-python
Вопрос:
Я хочу выполнить программу распознавания лиц для посещаемости с использованием python, в которой программа будет обнаруживать лицо, сохранять информацию о пользователе, такую как идентификатор и имя, в таблицу people в базе данных MySQL, а затем программа распознает лицо и вставит информацию о сохраненном пользователе ранее в другую таблицу, втаблица посещаемости. Однако я столкнулся с ошибкой «TypeError: не удается распаковать неинтерируемый объект int» в приведенной ниже кодировке:
db = database.open()
cursor_person = db.cursor()
cursor_att = db.cursor()
cursor_person.execute("SELECT pID, name_reg FROM people")
for row in cursor_person.fetchone():
pID, name_reg = row
cursor_att.execute("UPDATE attendance(ppID, name_att) SET ('{}', '{}') WHERE" .format (pID, name_reg))
db.commit()
Часть, в которой произошла ошибка, выглядит так, как показано ниже:
pID, name_reg = row <--- TypeError: cannot unpack non-iterable int object
Кто-нибудь знает, как это решить? Я надеюсь, что предоставленная мной информация окажется полезной. Заранее благодарю вас.
Комментарии:
1. Я думаю, что добавление a
row
2. Каков вывод
row
значения?row
Переменная не возвращает два значения.3. @Ahx Я хочу вставить pID и name_reg из таблицы «люди» в таблицу «посещаемость» с тем же значением, идентификатором и именем. или запрос, который я использую, неверен?
4. @AbrarAhmed Я пробовал, но я не совсем уверен, в чем проблема, потому что я снова получаю ту же ошибку.
Ответ №1:
Я полагаю, вы хотели бы использовать fetchall
Обратите внимание, что ваша фраза update sql нарушена.
for row in cursor_person.fetchall():
cursor_att.execute("UPDATE attendance SET ('{}', '{}') WHERE" .format (row[0], row[1]))
Ответ №2:
Способ отладить это print(row)
— посмотреть, что это такое.
Но я предполагаю, что ваша реальная проблема заключается в том, что эти два курсора не изолированы, поскольку они используют один и тот же сеанс. Вероятно, эта cursor_att.execute()
строка приводит cursor_person.fetchone()
к возвращению количества обновленных строк, т.е. int 1
.
Наконец, вы не должны использовать .format
для установки значений предложения UPDATE. В противном случае вы рискуете подвергнуться атакам SQL-инъекций или просто случайным ошибкам с вашей стороны, когда значения содержат символы типа '
. Есть пример того, как правильно передавать параметры следующим образом:
cursor.execute("UPDATE attendance SET (%s, %s)", (pID, name_reg))
И библиотека mysql-connector автоматически экранирует строки для вас.