[Python] SQLAlchemy:flush()とcommit()の違いは何ですか?


Answers

@スナップショーによると

flush() SQL文をデータベースに送ります

commit()はトランザクションをコミットします。

session.autocommit == Falseの場合:

autoflush == Trueの場合、commit()はflush()を呼び出します。

session.autocommit == Trueの場合:

トランザクションを開始していない場合はcommit()を呼び出すことはできません(トランザクションを手動で管理することを避けるためにおそらくこのモードを使用しているためではないでしょう)。

このモードでは、flush()を呼び出してORMの変更を保存する必要があります。 また、フラッシュは効果的にデータをコミットします。

Question

SQLAlchemyのflush()commit()の違いは何ですか?

私はドキュメントを読んだことがありますが、賢明な人はいません - 私は持っていないことを事前に理解しているようです。

特にメモリ使用量への影響に興味があります。 私はいくつかのデータを一連のファイル(合計500万行程度)からデータベースにロードしています。私のセッションは時折落ちます。大規模なデータベースで、あまりメモリがないマシンです。

私はあまりにも多くのcommit()と十分なflush()呼び出しを使用していないのだろうかと思っていますが、違いが何であるかを実際に理解することなく、伝えるのは難しいです!