当前位置: 首页 > 面试题库 >

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

经佐
2023-03-14
问题内容

使用Python 2.7和

在[150]中:psycopg2。 版本 Out [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.

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

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()

同样,基本思路是妥善处理错误。在皇家海军纳尔逊海军上将的格言中:“该死的演习直接针对他们”。我以为该死的错误直指它们。”我想通过在每个插入上打开一个游标,我将重置事务块。我不想仅由于主键错误而不必重置连接。有什么我只是想念的吗?

在此先感谢您的宝贵时间。


问题答案:

您应该在发生错误时回滚事务。

try..except..else在下面的代码中添加了另一种构造,以显示发生异常的确切位置。

try:
    cur = conn.cursor()

    try:
        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() })
    except psycopg2.IntegrityError:
        conn.rollback()
    else:
        conn.commit()

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


 类似资料:
  • 问题内容: 我在Mac系统上做了一个简单的操作。它安装正确,但是当我尝试使用psycopg2时出现错误: 显示恰到好处。我已经在多个virtualenvs上安装了psycopg2,但这是我第一次看到这样的错误。我尝试卸载并重新安装,结果相同。请帮忙 问题答案: 升级到Mountain Lion后,我遇到了类似的问题。 确保不要按Slack的建议复制libssl。*文件,而是确保它实际上是到库的最新

  • 我为我的项目设置了virtualenv并在何时运行 pip安装psycopg2 我在下面得到一个错误

  • 我正在尝试在MVVM中实现一个ViewModel,提供可观察的东西作为“输入流”,提供观察者作为“输出流”供视图绑定。

  • null null null null null

  • 问题内容: 我正在运行一个基于python flask的小型Web服务,我想在其中执行一个小型MySQL查询。当我获得SQL查询的有效输入时,一切都按预期工作,并且我获得了正确的值。但是,如果该值未存储在数据库中,则会收到一个 我试图利用错误处理自己,并在我的项目中使用此代码,但看来这无法正常工作。 基本上,我只想返回一个值,当一切都正常工作时,如果最好不要在服务器上显示错误消息,则不返回任何值。

  • 我想通过psycopg2将csv文件导入PostgreSQL。但是,csv文件列名包含特殊字符。我可以用这些代码行通过psycopg2创建一个表。 当我想使用copy_from函数导入带有这些代码行的csv文件时。 它总是返回错误psycopg2。错误。SyntaxError:在“/”处或附近出现语法错误 我尝试在特殊字符之前使用反斜杠,或者将特殊列名放在双引号中,但它仍然返回相同的错误消息。如何