我正在使用以下两个查询(在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)])
除了这两个查询,我只希望有一个查询,如果不退出,它将自动插入记录。我有两个问题:
答案 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