相关疑难解决方法(0)

在PostgreSQL中重复更新时插入?

几个月前,我从Stack Overflow的答案中学到了如何使用以下语法在MySQL中一次执行多个更新:

INSERT INTO table (id, field, field2) VALUES (1, A, X), (2, B, Y), (3, C, Z)
ON DUPLICATE KEY UPDATE field=VALUES(Col1), field2=VALUES(Col2);
Run Code Online (Sandbox Code Playgroud)

我现在切换到PostgreSQL,显然这是不正确的.它指的是所有正确的表,所以我认为这是使用不同关键字的问题,但我不确定PostgreSQL文档中的哪个被覆盖.

为了澄清,我想插入几个东西,如果它们已经存在则更新它们.

sql postgresql upsert sql-merge

611
推荐指数
15
解决办法
40万
查看次数

Python/psycopg2中的优雅主键错误处理

使用Python 2.7和

在[150]中:psycopg2.版本 [150]:'2.4.2(dt dec pq3 ext)'

我有一个简单的python脚本来处理事务并将数据写入数据库.偶尔会有一个违反我的主键的插入内容.这很好,我只是想让它忽略那条记录并继续它的快乐方式.我遇到的问题是psycopg2主键错误是在错误失败后中止整个事务块和所有插入.这是一个示例错误

ERROR: duplicate key value violates unique constraint "encounter_id_pkey"
DETAIL:  Key (encounter_id)=(9012235) already exists.
Run Code Online (Sandbox Code Playgroud)

这是在下一个插入.不违反.

Inserting: 0163168~9024065
ERROR: current transaction is aborted, commands ignored until end of transaction block
Run Code Online (Sandbox Code Playgroud)

每次插入都会重复第二个错误.这是一个简化的循环.我正在循环一个pandas数据框,但它可能是任何循环.

conn = psycopg2.connect("dbname='XXXX' user='XXXXX' host='XXXX' password='XXXXX'")

cur = conn.cursor()

for i, val in df2.iteritems():
    try:
        cur = conn.cursor()
        cur.execute("""insert into encounter_id_table (
        encounter_id,current_date  )
        values       
        (%(create_date)s, %(encounter_id)s ) ;""",
        'encounter_id':i.split('~')[1],  
        'create_date': datetime.date.today() })           
        cur.commit()
        cur.close() 
    except Exception , e:
        print 'ERROR:', e[0] …
Run Code Online (Sandbox Code Playgroud)

python sql postgresql psycopg2

18
推荐指数
1
解决办法
9888
查看次数

标签 统计

postgresql ×2

sql ×2

psycopg2 ×1

python ×1

sql-merge ×1

upsert ×1