我有一个更新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()
,但我更喜欢显式循环。是否有性能差异?
总的来说,我对游标的使用以及何时提交感到非常遗憾。
答案 0 :(得分:0)
当你想要应用一堆更改并希望能够回滚/不提交时,你必须提交,如果你在某处鼓励出现问题。在最常见的情况下,如果更改仅在一起应用时才会使用。
在你的情况下,在成千上万之后提交是有意义的。为了不使系统过度复杂,最好的方法是在循环后只提交一次。否则,您必须跟踪哪些行已更新或未更新。