Python DB-Api何时提交多个插入/更新

时间:2016-12-06 09:22:48

标签: python python-db-api

我有一个更新db中单行的函数。

def update_one_row(conn, condition, value):
    with conn.cursor() as curr:  
        curr.execute("""UPDATE persons p 
                        SET p.age=%s
                        WHERE p.name=%s;""",
                     (value, condition))

可以使用此函数多次(几千次)并在之后执行conn.commit(),如下所示:

from pymysql import Connect
connect_args = {...}
conn = Connect(**connect_args)
for condition, value in iterable_of_conditions_values:
    update_one_row(conn, condition, value)
# Here I visually inspect in jupyter notebook if things went as expected and I accidentaly did not screw up
conn.commit()

或者我应该将curr代替conn传递给update_one_row吗?

我知道curr.executemany(),但我更喜欢显式循环。是否有性能差异?

总的来说,我对游标的使用以及何时提交感到非常遗憾。

1 个答案:

答案 0 :(得分:0)

当你想要应用一堆更改并希望能够回滚/不提交时,你必须提交,如果你在某处鼓励出现问题。在最常见的情况下,如果更改仅在一起应用时才会使用。

在你的情况下,在成千上万之后提交是有意义的。为了不使系统过度复杂,最好的方法是在循环后只提交一次。否则,您必须跟踪哪些行已更新或未更新。