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()

または、 tocurrの代わりに渡す必要がありますか?connupdate_one_row

私は知ってcurr.executemany()いますが、明示的なループを好みます。性能差はありますか?

全体的に、カーソルの使用法といつコミットするかについてかなり迷っています。

4

1 に答える 1

0

一連の変更を適用したいときにコミットする必要があり、どこかで問題が発生した場合にロールバック/コミットしない機能が必要です。最も一般的なケースでは、これは変更が一緒に適用された場合にのみ意味がある場合に使用されます。

あなたの場合、それは数千の後にコミットするのが理にかなっています。システムを過度に複雑にしないための最善の方法は、ループの後に 1 回だけコミットすることです。そうしないと、どの行が更新されたかどうかを追跡する必要があります。

于 2016-12-06T09:49:46.327 に答える