ON DUPLICATE KEY UPDATE导致运行时错误

时间:2017-03-18 02:04:32

标签: python sqlite

我在两列之间有一个联合主键,我希望第一次插入列,然后用旧值+新值更新它们,我这样做是使用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)"]

1 个答案:

答案 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 ...""", ...)