如何在没有语法错误的情况下插入不存在的值?
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 constraint
或primary key constraint
.
这是一个测试用例:
我试图通过 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 constraint
或primary key constraint
.
这是一个测试用例: