我们正在研究人脸识别。我在for循环中遇到麻烦。会产生错误
TypeError:“ int”对象不可迭代
代码
mycursor = connect.cursor()
cmd = "SELECT * FROM students WHERE ID = " + Id
cursors = mycursor.execute(cmd)
isRecordExist = 0
for row in cursors:
isRecordExist = 1 //HERE IS THE LINE WHERE THE ERROR IS
if isRecordExist == 1:
mycursor.execute("UPDATE students SET Name = ? WHERE ID = ?",(Name, Id))
mycursor.execute("UPDATE students SET Roll = ? WHERE ID = ?",(roll, Id))
else:
params = (Id, Name, roll)
mycursor.execute("INSERT INTO students(ID, Name, Roll) VALUES(?, ?, ?)", params)
connect.commit()
connect.close()
错误
Enter student's name : jom
Enter student's Roll Number : 15
Traceback (most recent call last):
File "C:\Users\Shownu\Desktop\Autoattendance-Cognitive-master\add_student.py", line 33, in <module>
insertOrUpdate(Id, name, roll)
File "C:\Users\Shownu\Desktop\Autoattendance-Cognitive-master\add_student.py", line 19, in insertOrUpdate
for row in cursors:
TypeError: 'int' object is not iterable
答案 0 :(得分:1)
您的问题是您没有正确使用API。在Pytho DBAPI中,execute调用不返回行。它返回受影响的行的
用于您的MySQL API。
相反,您必须遍历游标对象本身。
cmd = "SELECT * FROM students WHERE ID = " + Id
mycursor.execute(cmd)
for row in mycursor:
...
答案 1 :(得分:0)
请指定您的代码使用的特定驱动程序。
假设sqlite3 Db连接的示例
db_conn = sqlite3.connect('mydbfile.db')
mycursor = db_conn.cursor()
然后
rows = mycursor.execute(cmd).fetchall()
for row in rows
# Do stuff on each row
答案 2 :(得分:0)
根据documentation,execute方法返回None
。
execute(query, vars=None)
执行数据库操作(查询或命令)。
参数可以作为序列或映射提供,并将绑定到操作中的变量。可以使用位置(%s)或命名的(%(name)s)占位符来指定变量。请参阅将参数传递给SQL查询。
该方法返回None。如果执行了查询,则可以使用fetch *()方法检索返回的值。
正确的执行方式将是
mycursor.execute(cmd)
for record in mycursor:
print(record)
希望这可以解决问题