2016-12-06 9 views
0

我有一个函数更新数据库中的单个行。Python DB-Api何时提交多个插入/更新

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(),但我更喜欢显式循环。是否有性能差异?

总的来说,我对游标的使用以及何时提交感到相当迷茫。

回答

0

你必须承诺,当你想应用一堆的变化,并希望有能力回滚/不提交如果你在某处发现问题。在最常见的情况下,只有在一起应用更改时才使用这种方法。

就你的情况而言,在数千次之后提交就会有意义。为了不过分复杂你的系统,最好的方法是在你的循环之后只提交一次。否则,您将不得不跟踪哪些行更新或不更新。