使用Python更新SQLite数据库中的行

2 投票
2 回答
2423 浏览
提问于 2025-04-18 16:40

我遇到了一个问题:

我想要逐行更新一个已经存在的SQLite数据库。但是现在的情况是,迭代器把所有的行都更新成了dbdata的最后一个值。

我不想这样。我希望先用dbdata的第一个值更新row 1,然后迭代器再“向上”走,获取下一个值,然后继续更新下一行。

显然,这里有逻辑上的问题,但我就是想不明白。

现在的情况是,所有的行都被更新了,结果是所有行都变成了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。

2 个回答

1

你所有的数据都被设置成了最后一个dbdata的原因是,因为你的更新没有限制在某一行上,所以在每次循环时,所有的行都被设置成你刚处理的那个dbdata。为了限制你的更新,只影响你想要的那一行,你需要使用一个where条件。

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))

这个方法有效!它在每次循环时都会改变行号。

撰写回答