Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取错误类型错误:';int';对象是不可编辑的_Python - Fatal编程技术网

Python 获取错误类型错误:';int';对象是不可编辑的

Python 获取错误类型错误:';int';对象是不可编辑的,python,Python,我们正在研究人脸识别。我的for循环有问题。它会产生错误 TypeError:“int”对象不可编辑 代码 mycursor = connect.cursor() cmd = "SELECT * FROM students WHERE ID = " + Id cursors = mycursor.execute(cmd) isRecordExist = 0 for row in cursors:

我们正在研究人脸识别。我的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()  
错误

输入学生姓名:jom
输入学生卷号:15
回溯(最近一次呼叫最后一次):
文件“C:\Users\Shownu\Desktop\AutoAttention认知主机\add\u student.py”,第33行,在
insertOrUpdate(Id、名称、卷号)
文件“C:\Users\Shownu\Desktop\AutoAttention认知主机\add_student.py”,第19行,插入更新
对于游标中的行:
TypeError:“int”对象不可编辑

请指定代码使用的特定驱动程序。
假设SQLITE3DB连接的示例

db_conn = sqlite3.connect('mydbfile.db')
mycursor = db_conn.cursor()
然后


您的问题是没有正确使用API。在pythodbapi中,execute调用不返回行。它返回受影响的行数。见例

用于MySQL API

相反,您必须迭代游标对象本身

cmd = "SELECT * FROM students WHERE ID = " + Id                             
mycursor.execute(cmd)
for row in mycursor:
     ...
根据,execute方法返回
None

execute(查询,vars=None)

执行数据库操作(查询或命令)

参数可以作为序列或映射提供,并将绑定到操作中的变量。变量使用位置(%s)或命名(%(名称)s)占位符指定。请参见向SQL查询传递参数

该方法不返回任何值。如果执行了查询,则可以使用fetch*()方法检索返回的值

正确的执行方法是-

mycursor.execute(cmd)
for record in mycursor:
    print(record)

希望这能解决问题

大概,
游标
int
。我不知道您使用的db api的语义,但您在代码中只有一个地方可以进行迭代。显而易见的答案是“mycursor.execute(cmd)”返回一个“int”。为什么sql concat
Id
而不是其他的呢?为什么不全部参数化?最初,导入数据库是sqllite。我只是转换成MySQL,因为这是必需的。我是python新手,所以我非常需要帮助,因为错误
游标
是一个
int
而不是一个
列表
我正在使用MYSQL作为数据库,而不是sqlite3。如何?我是python的新手。对不起:(
cmd = "SELECT * FROM students WHERE ID = " + Id                             
mycursor.execute(cmd)
for row in mycursor:
     ...
mycursor.execute(cmd)
for record in mycursor:
    print(record)