python - 如果值已经在表中,如何将值插入表或更新它

标签 python sql sqlite

我正在建立一个包含两个字段的数据库,即 user_id 和计数,如果表中已存在具有相同 user_id 的记录,我希望能够插入这对值或将计数递增 1。

我已经尝试过很多解决方案,例如 INSERT INTO ... ON DUPLICATE KEY UPDATE ...,但它们对我不起作用。它抛出一个错误:

sqlite3.OperationalError: near "ON": syntax error

我在 python 3.7 上运行 SQLite 3.21.0。

这是我的代码:

def add_warning(id):
    sql = f"""INSERT INTO warnings (user_id, count) VALUES({id}, 1) ON CONFLICT(user_id) DO UPDATE SET count=count+1"""
    cursor.execute(sql)

我希望在执行查询时更新计数值,但当我尝试这样做时会抛出错误。

最佳答案

假设user_id 是您可以使用的表的主键 (INSERT OR) REPLACE :

sql = "REPLACE INTO warnings (user_id, count) VALUES(?, COALESCE((SELECT count + 1 FROM warnings WHERE user_id = ?), 1))"
cursor.execute(sql1, (id, id,))

参见 demo .

关于python - 如果值已经在表中,如何将值插入表或更新它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58471256/

相关文章:

python - 从没有掩码 pandas 的条件语句创建新列

python - ".main"在python源代码中是什么意思?

python - pandas 根据各个部分将字符串拆分为多列

Java 类 - 构造函数的最佳实践 (android)

php - java.lang.String 无法转换为 JSONObject

android - Sqlite Azure 移动服务 SDK 中的连接池已关闭

python - PyQt - 窗口的位置

mysql - 操作数应包含 1 列

sql - Order BY 将 30 毫秒的查询变成 7120 毫秒的查询。已知性能问题?

python - 将混合列表转换为字符串,只为字符串保留引号