【问题标题】:SQLite insert if not exist else increase integer valueSQLite 如果不存在则插入,否则增加整数值
【发布时间】:2015-05-03 04:34:51
【问题描述】:

如果值不存在,我需要一种插入值的方法,如果存在,则应该将该值增加另一个变量。

这是我的桌子的样子:

CREATE TABLE IF NOT EXISTS table(
      Id INTEGER PRIMARY KEY,
      Date TEXT,
      Quantity INTEGER

每当我将日期添加到数据库时,加上我想要的数量,将数量添加到表中的“数量”中。所以每个“日期”只会分配 1 个“数量”。

只是一个小例子:

INSERT INTO Table (Date, Quantity) VALUES('%s', Quantity+%s)) % ('12/5/2013', 20);

如果已经有一条类似 ('12/5/2013', 5) 的记录 应该是 ('12/5/2013', 25)。

我发现了 1 个非常相似的问题,但我不明白,我如何也使整数增加.. Another Question

【问题讨论】:

  • 您能否在链接到的答案中具体说明您不理解的内容? replace or insert 听起来很不言自明。 coalesce 对我来说是新的,但根据文档,它返回传入的第一个非 null 参数,因此如果选择返回 null(因为还没有给定日期的记录),则第二个参数用作后备。在你的情况下,你只是不想要coalesce(SELECT val+1 …, 1),而是像coalesce(SELECT quantity+quantity …, quantitty) sqlite.org/lang_corefunc.html

标签: python sqlite exists not-exists


【解决方案1】:

如果您希望每个日期只有一列,则应将其声明为 UNIQUE,甚至声明为表的 PRIMARY KEY。

如果您这样做,那么您可以将 Quantity 列声明为 INTEGER NOT NULL DEFAULT 0。然后您的表将被定义为:

CREATE TABLE IF NOT EXISTS table (
    Date TEXT PRIMARY KEY,
    Quantity INTEGER NOT NULL DEFAULT 0
);

然后当你想添加到特定日期时,你运行:

# assuming 'db' is your sqlite3 database
date_to_insert = '12/5/2013'
amount_to_add = 20
db.execute('INSERT OR IGNORE INTO table(Date) VALUES(?)', (date_to_insert,))
db.execute('UPDATE table SET Quantity = Quantity + ? WHERE Date = ?', (amount_to_add, date_to_insert))

【讨论】:

  • 真棒,我将 Date 声明为 UNIQUE 并将 Id 声明为 PRIMARY。像魅力一样工作。
猜你喜欢
  • 2013-07-23
  • 2018-10-12
  • 2014-11-29
  • 2021-10-14
  • 2015-03-31
  • 2012-02-14
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多