Postgresql Python:忽略重复键异常

发布时间:2020-08-10 发布网站:编程之家
编程之家收集整理的这篇文章主要介绍了Postgresql Python:忽略重复键异常编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我按以下方式使用psycopg2插入项目:

cursor = connection.cursor()
for item in items:
    try:
        cursor.execute(
            "INSERT INTO items (name,description) VALUES (%s,%s)  RETURNING id",(item[0],item[1])
        )
        id = cursor.fetchone[0]
        if id is not None:
            cursor.execute(
                "INSERT INTO item_tags (item,tag) VALUES (%s,(id,'some_tag')
            )    
    except psycopg2.Error:
        connection.rollback()
        print("PostgreSQL Error: " + e.diag.message_primary)
        continue
    print(item[0])
connection.commit()

显然,当一个项目已经在数据库中时,将抛出重复的键异常.有没有办法忽略这个例外?抛出异常时是否会中止整个事务?如果是,那么重写查询的最佳选择是什么,可能使用批量插入?

解决方法

Graceful Primary Key Error handling in Python/psycopg2

You should rollback transaction on error.

I’ve added one more try..except..else construction in the code bellow
to show the exact place where exception will occur.

try:
    cur = conn.cursor()

    try:
        cur.execute( """INSERT INTO items (name,description) 
                      VALUES (%s,%s)  RETURNING id""",item[1]))
    except psycopg2.IntegrityError:
        conn.rollback()
    else:
        conn.commit()

    cur.close() 
except Exception,e:
    print 'ERROR:',e[0]

总结

以上是编程之家为你收集整理的Postgresql Python:忽略重复键异常全部内容,希望文章能够帮你解决Postgresql Python:忽略重复键异常所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入编程之家官方QQ群:1065694478
编程之家官方公众号

微信公众号搜索 “ 程序精选 ” ,选择关注!

微信公众号搜索 “ 程序精选 ”
精选程序员所需精品干货内容!