mysql - Postgresq / Python,将更新和插入查询变成一个查询,仅当记录不存在时才插入
问题描述
我正在使用以下两个查询(在 PostgreSQL/Python 中):
query_update = """UPDATE my_table
SET {}='{}'
WHERE index={}""".format(*[str(updated_columns), str(updated_values), str(updated_row_indices)])
query_insert = """INSERT INTO my_table ({})
VALUES ('{}')""".format(*[str(updated_columns), str(updated_values), str(updated_row_indices)])
而不是这两个查询,我只想有一个查询,如果它不退出,它将自动插入记录。我有两个问题:
- 如何使用 PostgreSQL 将这两个查询合并为一个查询?(重要的)
- 如何使用 MySQL 做同样的事情?(可选的)
解决方案
不需要 query_update。
将ON CONFLICT子句添加到您的 query_insert变量。
query_insert = """INSERT INTO my_table ({})
VALUES ('{}')
ON CONFLICT ({}) DO
UPDATE
SET {}""".format(*[str(columns_to_insert), str(column_values), str(key_columns)], str(column_values_update))
在这里, columns_to_insert应该是您插入数据的列的逗号分隔列表; column_values应该是以逗号分隔的columns_to_insert值列表; key_columns应该是一个逗号分隔的主键列列表; column_values_update应该是一个逗号分隔的column_name=column_value对列表(类似于常规 UPDATE 命令)。
推荐阅读
- jquery - 防止在儿童 li 链接上的 slideToggle
- scala - 当类及其参数从同一特征扩展时,方法签名会发生冲突
- javascript - knockout.js 使用一些布尔变量应用复选框预定义的初始状态或默认状态
- vba - 如何从命令行使用 OnSlideShowPageChange 运行 PowerPoint 幻灯片
- php - htaccess 在实时服务器上不起作用重写规则
- python - 如何修复'没有模块名称:object_objection.box_coders'?
- python - 如何将字符串转换为列表的现有变量名称作为函数的参数
- python - Python 脚本从终端运行,但不是 crontab。使用绝对路径但无济于事
- ads - java.lang.NoSuchMethodError: org.altbeacon.beacon 的 android.bluetoothAdapter.getBluetoothLeAdvertiser
- rest - REST API:无效 JSON 的 HTML 通用错误响应