TypeError:无法为人脸识别python解包不可迭代的int对象



我想用python做考勤程序的人脸识别,程序会检测到人脸,将用户的ID和Name等信息保存到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

有人知道怎么解决这个问题吗?我希望我所提供的信息是有用的。提前谢谢。

我相信您希望使用fetchall
请注意,您的更新sql短语已损坏。

for row in cursor_person.fetchall():
cursor_att.execute("UPDATE attendance SET ('{}', '{}') WHERE" .format (row[0], row[1]))

调试它的方法是print(row)并查看它是什么。

但我猜你真正的问题是,这两个游标并没有被隔离,因为它们共享同一个会话。cursor_att.execute()行可能导致cursor_person.fetchone()返回更新的行数,即int1

最后,您不应该使用.format来设置UPDATE子句的值。否则,当值包含像'这样的字符时,您将面临SQL注入攻击的风险,或者只是您自己的意外错误。有一个关于如何正确传递这样的参数的例子:

cursor.execute("UPDATE attendance SET (%s, %s)", (pID, name_reg))

mysql连接器库将自动为您转义字符串。

最新更新