使用Python 2.7和
In 150: psycopg2.version Out150:'2.4.2 (dt dec pq3 ext)‘
我有一个简单的python脚本,处理事务并将数据写入数据库。偶尔会有一个insert违反我的主键。这很好,我只想让它忽略这条记录,快乐地继续它。我遇到的问题是psycopg2主键错误中止了整个事务块,错误之后的所有插入都失败了。下面是一个错误示例
ERROR: duplicate key value violates unique constraint "encounter_id_pkey"
DETAIL: Key (encounter_id)=(9012235) already exists.
这是在下一次插入时。不是违规。
Inserting: 0163168~9024065
ERROR: current transaction is aborted, commands ignored until end of transaction block
第二个错误会在每次插入时重复出现。这是一个简化的循环。我正在遍历一个熊猫数据帧,但它可以是任何循环。
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]
cur.close()
conn.close()
同样,基本思想是优雅地处理错误。在皇家海军海军上将纳尔逊的名言中:“该死的演习直指他们”。或者,在我们的例子中,错误直接指向它们。“我想,通过在每次插入时打开游标,我将重置事务块。我不想因为主键错误而重置连接。我是不是遗漏了什么?
在此之前,感谢您的宝贵时间。
约翰
https://stackoverflow.com/questions/8497886
复制相似问题