如何仅回滚psycopg2.execute\值或execute\ many上的失败条目?

2024-09-29 21:27:20 发布

您现在位置:Python中文网/ 问答频道 /正文

基本上,当通过psycopg2.execute_values执行批插入时,除了psycopg2.IntegrityError之外的I。如果异常被触发-在我的例子中是由于一个重复的主键-Irollback()连接。你知道吗

但是,我仍然希望插入没有触发异常的行。我目前处理这个问题的计划是(在异常情况下)在for循环和个别insert语句中再次遍历所有值,因此除了被异常的行之外,所有值都被插入。你知道吗

这是非常低效的。我不仅必须重新插入所有可接受的行,而且必须以一种非常低效的方式进行。你知道吗

问题:

1:有没有办法在psycopg2.execute_values中更好地处理这个异常,这样我仍然可以提交所有接受的值,并回滚失败的行?你知道吗

2:如果没有,除了遍历数据结构并单独插入每一行之外,还有没有更有效的方法来批量插入某些行可能会失败?你知道吗

要给出代码外观的上下文,请执行以下操作:

qry = """
        INSERT INTO delivery_pref_history ('val1, val2)
        VALUES %s
    """

conn, cur = my_pg_connect_function()

try:
    execute_values(cur, qry, [(val1, val2) for val1, val2 in zip(df_column1, df_column2)])

except psycopg2.IntegrityError:
    conn.rollback()
    logging.warning('Found duplicate primary key, rolling back')

   # Attempt inserts individually
   # New code, for loop over dataframe to insert individually

else:
    conn.commit()

Tags: dfforexecuteconnpsycopg2例子insertvalues

热门问题