收到错误TypeError:“ int”对象不可迭代

时间:2019-02-19 16:05:46

标签: python

我们正在研究人脸识别。我在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

3 个答案:

答案 0 :(得分:1)

您的问题是您没有正确使用API​​。在Pytho DBAPI中,execute调用不返回行。它返回受影响的行的 number 。参见例如

http://mysql-python.sourceforge.net/MySQLdb-1.2.2/public/MySQLdb.cursors.BaseCursor-class.html#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)

希望这可以解决问题