我正在使用psycopg2将命令插入postgres数据库,当出现冲突时,我只想更新其他列值。
查询如下:
insert_sql = '''
INSERT INTO tablename (col1, col2, col3,col4)
VALUES (%s, %s, %s, %s) (val1,val2,val3,val4)
ON CONFLICT (col1)
DO UPDATE SET
(col2, col3, col4)
= (val2, val3, val4) ; '''
cur.excecute(insert_sql)
我想找出我做错了什么?我使用的是变量val1,val2,val3而不是实际值。
5条答案
按热度按时间aoyhnmkz1#
To quote from psycopg2's documentation :
Now, for an upsert operation you can do this:
Notice that the parameters for the query are being passed as a tuple to the
execute
statement (this assures psycopg2 will take care of adapting them to SQL while shielding you from injection attacks).The
EXCLUDED
bit allows you to reuse the values without the need to specify them twice in the data parameter.7fhtutme2#
使用:
我收到以下错误:
变更为:
已解决问题。
8yoxcaq73#
试试看:
hivapdat4#
我还没有看到任何人对此发表评论,但是您可以利用
psycopg2.extras.execute_values
一次插入/更新许多行数据,我认为这是许多插入/更新的预期解决方案。YouTube上有一些教程对此进行了说明,其中一个教程是How to connect to PSQL Database using psycopg2 + Python
在视频中,他们使用
pandas
加载 Dataframe ,并将CSV源中的数据插入多个模式/表。Jupyter笔记本电脑是psycopg2-python-tutorial/new-schemas-tables-insert.ipynb
of1yzvn45#
下面的函数接受df、表的schemaname、表的name、冲突名称中要用作冲突的列,以及sqlalchemy的create_engine创建的引擎,它根据冲突列更新表,这是@ IonutTicus解决方案的扩展解决方案,不要使用pandas.to_sql()一起. pandas.to_sql()破坏主键设置,这种情况下需要通过ALTER查询设置主键,这是下面函数的建议,主键不一定被Pandas破坏,可能还没有设置主键,这种情况下会出现错误:没有唯一的约束条件匹配被引用表的给定键?函数将建议您执行下面的操作。
功能: