如何在没有语法错误的情况下插入不存在的值?

How to insert values that don't exist without syntax error?

我试图通过 ID 仅添加不存在的值,我不需要覆盖现有值。 也许有人可以告诉我如何解决这个问题?

c.execute("INSERT INTO coins VALUES (:id, :symbol, :current_price, :market_cap,) SELECT * FROM coins WHERE 'id' != :id",
          {'id': ids["id"], 'symbol': ids["symbol"], 'current_price': ids["current_price"], 'market_cap': ids["market_cap"]})

您可以使用现有的插入查询:

INSERT INTO coins (id, symbol, current_price, market_cap)
SELECT ?, ?, ?, ?
WHERE NOT EXISTS (SELECT 1 FROM coins WHERE id = ?);

Python 代码为:

sql = """
INSERT INTO coins (id, symbol, current_price, market_cap)
SELECT :id, :symbol, :current_price, :market_cap
WHERE NOT EXISTS (SELECT 1 FROM coins WHERE id = :id)"""
c.execute(sql, {'id': ids["id"], 'symbol': ids["symbol"], 'current_price': ids["current_price"], 'market_cap': ids["market_cap"]})

请注意,假设 id 已经是主键或具有唯一索引,您甚至可能不需要执行此操作。在这种情况下,任何尝试使用重复 id 的插入都会在数据库级别失败。

就这么简单:

INSERT OR IGNORE INTO coins VALUES (5, 'symbol', 'current_price', 'market_cap');

id只需要相应的unique constraintprimary key constraint.

这是一个测试用例:

Working test case