0

我有一个函数可以更新 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不是connupdate_one_row

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

总的来说,我对游标的使用和何时提交非常迷茫。

4

1 回答 1

0

当您想要应用大量更改并且想要在某个地方遇到问题时能够回滚/不提交时,您必须提交。在最常见的情况下,当更改仅在一起应用时才有意义时使用。

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

于 2016-12-06T09:49:46.327 回答