我有以下问题:
我想逐行更新现有的SQLite数据库。现在发生的是迭代器更新所有现有行,其最后一个值为dbdata
。
我不希望这样。
我希望更新row 1
的第一个分配值为dbdata
。然后取迭代器再次“向上”,得到下一个值,更新应该继续到下一行。
显然逻辑存在问题,但我无法理解它。
现在发生的事情是现在更新了行,这使得我为所有行分配了dbdata
的最后一个值。我只希望每次迭代更新一行。
我怎么告诉Python总是“走一排”?有人能暗示一下吗?我不是在寻找一个完整的解决方案。我目前的代码如下:
for row in dbconnector:
print (row)
dbdata = langid.classify("{}".format(row))
print (dbdata)
connector.execute('''update SOMEDB set test1=? , test2=?''',(dbdata[-2], dbdata[-1]))
我正在使用SQLite数据库和Python 3.3。
答案 0 :(得分:1)
将所有数据设置为最后一个dbdata的原因是因为您的更新不限于单行,因此在每次迭代时,所有行都设置为您刚处理的任何dbdata。要限制更新,请使用where子句,以便唯一受影响的行是您想要的行。
答案 1 :(得分:1)
解决了它。感谢所有的投入!
n = 0
for row in dbconnector:
print (row)
dbdata = langid.classify("{}".format(row))
print (dbdata)
for amount in row:
n += 1
print (n)
connector.execute('''update SOMEDB set test1=? , test2=? where rowid == ?''',(dbdata[-2], dbdata[-1], n))
有效!它会在每次迭代时改变rowid的数量。