Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Psycopg2使用一个查询向上插入多行_Python 3.x_Psycopg2 - Fatal编程技术网

Python 3.x Psycopg2使用一个查询向上插入多行

Python 3.x Psycopg2使用一个查询向上插入多行,python-3.x,psycopg2,Python 3.x,Psycopg2,我在postgresql中有一个表,其中包含字段id(唯一)和val。 我想执行如下操作: 插入my_表(id,val) 值(%(id)s、%(val)s) 在冲突(id)上执行更新 设置val=val+%(val)s 要插入的数据类似于[{“id”:123,“val”:5},{“id”:456,“val”:8},…]。是否有任何方法可以通过一个查询将所有这些都插入 cursor.executemany不行,这与在循环中一个接一个地使用所有这些dict进行查询是一样的。 在没有冲突的情况下,我

我在postgresql中有一个表,其中包含字段
id
(唯一)和
val
。 我想执行如下操作:

插入my_表(id,val)
值(%(id)s、%(val)s)
在冲突(id)上执行更新
设置val=val+%(val)s
要插入的数据类似于
[{“id”:123,“val”:5},{“id”:456,“val”:8},…]
。是否有任何方法可以通过一个查询将所有这些都插入

cursor.executemany
不行,这与在循环中一个接一个地使用所有这些dict进行查询是一样的。
在没有冲突的情况下,我可以执行类似于“插入mytable(id,val)值”+“,”的操作。连接(['(%s,%s)]*len(数据))并将数据转换为列表[id1,val1,id2,val2,…]。但我不知道如何组合多个值来插入和更新语句。

我也有同样的问题。经过一段时间的搜索,我发现了两个帖子:

  • Posgresql-上传:
  • Psycopg2-插入多行:
  • =>因此,您的答案是:

        # my table: cas(address, id, description) - address is primary key
    data = [('0x18f9f00a432F50c6E2429d31776724d3cB873BEF', '1000', 'mot ngan'),
            ('0x06471C53CE649Eb4dA88b792D500544A7E5C9635', '2000', 'hai ngan')]
    args = [cur.mogrify('(%s, %s, %s)', x).decode('utf-8')
            for x in data]
    args_str = ', '.join(args)
    cur.execute('''INSERT INTO cas (address, id, description) VALUES'''
                + args_str +
                '''ON CONFLICT (address) DO UPDATE SET     
            (address, id, description) = (EXCLUDED.address, EXCLUDED.id, EXCLUDED.description)''')