如何在不提交的情况下运行psycopg2.extras.execute_values()?

我正在跑步:

def db_connect():
    conn = psycopg2.connect(
        host=host,database=database,user=user,password=password
    )
    return conn


data_to_insert = []
for a,b,c in data_source:  # len(data_source) > 100000
   data_to_insert.append(a,c) 


def insert_to_table():

    request = "INSERT INTO tablename " \ 
              "(a,c) " \
              "VALUES " \
              "%s "

    do_commit = False

    with db_connect() as conn:
        with conn.cursor() as cur:
                psycopg2.extras.execute_values(cur,request,data_to_insert,template=None)

        if do_commit:
            conn.commit() # this line could be completely omitted 

仍然提交。有可能避免这种情况吗?如果我没记错的话,其他cur.execute()等较慢的处理方式也没有问题。

psycopg2.__version__2.8.2 (dt dec pq3 ext lo64)

x86_64-pc-linux-gnu上的PostgreSQL 10.10(Ubuntu 10.10-0ubuntu0.18.04.1),由gcc(Ubuntu 7.4.0-1ubuntu1〜18.04.1)7.4.0,64位编译

wupengtao000 回答:如何在不提交的情况下运行psycopg2.extras.execute_values()?

默认情况下,conn在退出'with'语句后将提交。

  

从2.5版开始,psycopg2的连接和游标为   上下文管理器,可以与with语句一起使用:

with psycopg2.connect(DSN) as conn:
    with conn.cursor() as curs:
        curs.execute(SQL) 
     

当连接退出with块时,如果该块未引发任何异常,则事务为   承诺。如果发生异常,则事务将回滚。

所以不要这样做:

if do_commit:
    conn.commit()

if not do_commit:
    conn.rollback()
本文链接:https://www.f2er.com/3043537.html

大家都在问