我想在 python 中使用单个查询更新多行。我根据以下示例使用executemany ,但出现此错误:
操作数应包含 1 列
这是我的代码,它显示了我如何创建需要更新的行的值列表。我更新发布只是字符串NULL的行。
def UpdatePostingList (self, data):
queryUpdate='Update KeywordIndex2 set postings=%s where keyValue= %s'
querySelect='SELECT postings FROM KeywordIndex2 where keyValue= %s'
list=[]
try:
for i in range(0,len(data)):
keyValue=data[i][0]
k=(keyValue,)
self.cursor.execute(querySelect,k)
postings= self.cursor.fetchall()
pst=[x[0] for x in postings]
if pst[0]=='NULL':
p=data[i][1]
list.insert(i, (p,keyValue))
print list
self.cursor.executemany(queryUpdate,list)
self.connection.commit()
except MySQLdb.Error, e:
try:
print "MySQL Error [%d]: %s" % (e.args[0], e.args[1])
except IndexError:
print "MySQL IndexError: %s" % str(e)
self.connection.rollback()
我得到了这个输出:
[[((3,3,0.4698370099067688),(12,0.3859847187995959106),(2,2.33320342302323877),(1,1,1,0.3257867097854614) 0.5671890079975128), (24, 0.5287801623344421), (9, 0.5264906287193298), (15, 0.47776609659194946)], 'yang'), ([(12, 0.6617408990859985), (3, 0.6475195586681366), (15, 0.4491569995880127), (24, 0.4268345832824707), (21, 0.40550071001052856)], 'world')] MySQL 错误 [1241]: 操作数应包含 1 列
要明确 list 的最后一个成员,keyValue是world,postinglist是元组的第一部分。