SQLite3如何实现仅对指定account的单行cost字段累加数值
SQLite3 仅更新单条匹配行的cost字段累加方案
问题根因:你当前使用的UPDATE语句没有限制更新行数,所有满足WHERE account=?过滤条件的行都会被执行cost字段累加逻辑,和你的需求不符。
方案1:使用UPDATE + LIMIT 1(适用SQLite 3.33.0及以上版本)
SQLite 3.33.0版本开始原生支持UPDATE语句携带LIMIT子句,直接修改语句即可实现仅更新1条匹配记录:
self.cursor.execute('UPDATE inventory SET cost = cost + ? WHERE account = ? LIMIT 1', (value, account))
方案2:先查主键再更新(兼容所有SQLite版本)
如果你的运行环境SQLite版本较低不支持UPDATE加LIMIT,可以先查询任意一条匹配记录的主键,再针对单条记录执行更新:
# 假设inventory表主键为id,可替换为你表的实际主键字段 self.cursor.execute('SELECT id FROM inventory WHERE account = ? LIMIT 1', (account,)) target_row = self.cursor.fetchone() if target_row: self.cursor.execute('UPDATE inventory SET cost = cost + ? WHERE id = ?', (value, target_row[0]))
以上两种方案都可以实现仅对任意一条符合account条件的记录执行cost字段累加,没有特殊排序要求时默认取匹配结果的第一条,完全满足需求。
内容的提问来源于stack exchange,提问作者user16271811
相关产品推荐
相关产品推荐

