2

我想在 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 的最后一个成员,keyValueworldpostinglist是元组的第一部分。

4

1 回答 1

1

我的代码的问题是我将p作为列发布的元组列表发送。我在下面的代码行中将 p 更改str (p),问题就解决了。

list.insert(i, (str(p),keyValue))
于 2017-01-22T14:29:15.013 回答