【问题标题】:Increment a column value of an entity in an SQL table增加 SQL 表中实体的列值
【发布时间】:2020-10-25 19:57:04
【问题描述】:

我已经设置了下表:

CREATE TABLE transactions (txn_id SERIAL, stock VARCHAR NOT NULL, qty INT NOT NULL, user_id INT NOT NULL);

插入几行后,表格如下所示:

txn_id | stock  | qty | user_id
--------+--------+-----+---------
      1 | APPL   |   2 |       1
      2 | GOOGLE |   3 |       4
      3 | TSLA   |   1 |       2

现在,在向表中添加新插入时, 例如 - INSERT INTO transactions (stock, qty, user_id) VALUES ('APPL', 3, 1) 如果 'stock' 和 'user_id' 匹配(如上例所示),我只希望在数据库中更新数量。例如在这种情况下,第 1 行实体的 'qty' 列值应该增加 +3。

在不使用 SQLalchemy 等 ORM 的情况下,是否有解决方案?

【问题讨论】:

    标签: sql database postgresql orm sqlalchemy


    【解决方案1】:

    你想要on conflict。首先在stock/user_id列上设置唯一约束:

    alter table transactions add constraint unq_transactions_stock_user_id unique (stock, user_id);
    

    然后将其与on conflict 语句一起使用:

    insert into transactions (stock, qty, user_id) 
        values ('APPL', 3, 1)
        on conflict on constraint unq_transactions_stock_user_id do update
            set qty = coalesce(transactions.qty, 0) + excluded.qty;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-15
      • 1970-01-01
      • 2015-01-18
      • 2014-02-25
      • 2019-07-31
      • 1970-01-01
      相关资源
      最近更新 更多