Postgresq / Python,将一个更新和一个插入查询转换为一个查询,仅当记录不存在时才插入

时间:2019-01-10 14:47:40

标签: mysql postgresql

我正在使用以下两个查询(在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)])

除了这两个查询,我只希望有一个查询,如果不退出,它将自动插入记录。我有两个问题:

  1. 如何使用PostgreSQL将这两个查询合并为一个查询? (重要)
  2. 如何使用MySQL执行相同操作? (可选)

2 个答案:

答案 0 :(得分:1)

不需要

query_update

向您 query_insert 变量添加 ON CONFLICT 子句。

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命令)。

答案 1 :(得分:0)

有些东西称为合并语句。这将完全满足您的需求

https://www.postgresql.org/message-id/attachment/23520/sql-merge.html