2013-10-11 187 views
1

我用命令下面在我的Python代码以更新数据的基础上sqlite3。 ValueError异常:操作参数必须是STR或Unicode

"""UPDATE dbtest SET id = ?, value = ? WHERE name=? ,("%s", "%s","%s")""" (data[0],data[1],data[2]) 

data[0],data[1],data[2],其中数据是一个列表。 Python演示

ValueError: operation parameter must be str or unicode 

运行脚本时。 我无法弄清楚问题发生的原因。

+1

这是确切的代码?看起来你在SQL字符串中有多余的数据,并且我们也看不到完整的函数调用...... –

+0

'data'的内容是什么? – aIKid

+1

我想你应该在元组之前使用'%'? –

回答

1

您的值列表应该位于SQL字符串之外,例如,

db.execute("""UPDATE dbtest SET id = ?, value = ? WHERE name=?""", (data[0],data[1],data[2])) 
+0

cmd =“”“UPDATE SimulationParamDB SET enable =%d,value =%s WHERE messagename =%s”“”%(int(data [1]),data [2],data [0])然后db。执行(CMD)。数据具有字符串值。当我执行这个Python引发OperationalError:无法识别的令牌:“078ab291”其中“078ab921”是数据[2] – user2870950

+0

这就是为什么''''''优于''%s'''的原因,因为引擎会处理类型插入,引用等等。现在,做“...%s”%(...)是一个SQL注入向量。因此,在传递参数之前先转换你的arg类型:db.execute(“”“UPDATE dbtest SET id =?,value =?WHERE name =?”“”,(int(data [0]),data [1],data [2]))''' –

+0

data = ['xyz','1','07b3450192043a23']。我试过这样的:db.execute(“”“UPDATE db SET enable =?,value =?WHERE name =?”“”,((int)(data [1]),data [2],data [0] ))。但是python会抛出“TypeError:'str'对象不可调用” – user2870950

相关问题