首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python/Python copg2中优雅的主键错误处理

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

Stack Overflow用户
提问于 2011-12-14 07:48:01
回答 2查看 11.9K关注 0票数 21

使用Python 2.7和

In 150: psycopg2.version Out150:'2.4.2 (dt dec pq3 ext)‘

我有一个简单的python脚本,处理事务并将数据写入数据库。偶尔会有一个insert违反我的主键。这很好,我只想让它忽略这条记录,快乐地继续它。我遇到的问题是psycopg2主键错误中止了整个事务块,错误之后的所有插入都失败了。下面是一个错误示例

代码语言:javascript
复制
ERROR: duplicate key value violates unique constraint "encounter_id_pkey"
DETAIL:  Key (encounter_id)=(9012235) already exists.

这是在下一次插入时。不是违规。

代码语言:javascript
复制
Inserting: 0163168~9024065
ERROR: current transaction is aborted, commands ignored until end of transaction block

第二个错误会在每次插入时重复出现。这是一个简化的循环。我正在遍历一个熊猫数据帧,但它可以是任何循环。

代码语言:javascript
复制
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()   

同样,基本思想是优雅地处理错误。在皇家海军海军上将纳尔逊的名言中:“该死的演习直指他们”。或者,在我们的例子中,错误直接指向它们。“我想,通过在每次插入时打开游标,我将重置事务块。我不想因为主键错误而重置连接。我是不是遗漏了什么?

在此之前,感谢您的宝贵时间。

约翰

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8497886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档