我在两列之间有一个联合主键,我希望第一次插入列,然后用旧值+新值更新它们,我这样做是使用python和sqlite3
这是我的代码:
db.execute(""" INSERT INTO transactions
(user_id, name, symbol, shares, total)
VALUES
(:user_id, :name, :symbol, :shares, :total )
ON DUPLICATE KEY UPDATE
shares =shares+ :shares,
total = total + :total""",
user_id=session["user_id"],
name=q["name"],
symbol = q["symbol"],
shares=shares,
total=total
)
如果插入了相同的符号和user_id,我只想更新共享和总数,因为旧的共享值被添加到共享的新值并且总数相同,它会让我遇到运行时错误在ON ,,,任何帮助或提示表示赞赏
更新错误是:
RuntimeError: (sqlite3.OperationalError) near "ON": syntax error [SQL: " INSERT INTO transactions \n (user_id, name, symbol, shares, total)\n VALUES \n (16, 'Genpact Limited Common Stock', 'G', 5, 122.25 ) \n ON DUPLICATE KEY UPDATE \n shares = shares + VALUES(shares),\n total = total + VALUES(total)"]
答案 0 :(得分:1)
INSERT statement没有ON DUPLICATE子句(在SQLite中)。
SQLite是一个没有客户端/服务器通信开销的嵌入式数据库,因此没有必要尝试将多个内容压缩到单个SQL语句中。只需单独进行更新:
c = db.cursor()
c.execute("""UPDATE transactions
SET shares = shares + :shares,
total = total + :total
WHERE user_id = :user_id
AND symbol = :symbol""",
...)
if c.rowcount == 0:
c.execute("""INSERT INTO transactions ...""", ...)