我想用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连接器库将自动为您转义字符串。