SQLAlchemyの自動コミットが機能する方法は、発行されたステートメントを検査し、データが変更されているかどうかを検出しようとすることです。
...、SQLAlchemyは、すべてのバックエンドで完全に一貫して機能する独自の「自動コミット」機能を実装しています。これは、データ変更操作を表すステートメント(INSERT、UPDATE、DELETE)と、CREATE TABLE、ALTER TABLEなどのデータ定義言語(DDL)ステートメントを検出し、トランザクションが進行中でない場合はCOMMITを自動的に発行することで実現されます。 。検出は、
autocommit=True
の存在に基づいています ステートメントの実行オプション。ステートメントがテキストのみのステートメントであり、フラグが設定されていない場合、正規表現を使用して、INSERT、UPDATE、DELETE、および特定のバックエンドに対するその他のさまざまなコマンドを検出します
SQLAlchemyレベルでは複数の結果セットがサポートされていないため、最初の例では、最初のであるため、検出ではCOMMITの発行が省略されます。 ステートメントはSELECTですが、2番目の例のようにUPDATEです。複数のステートメントからデータ変更ステートメントを検出する試みは行われません。
PGExecutionContext.should_autocommit_text()
を見ると 、AUTOCOMMIT_REGEXP
に対して正規表現が一致することがわかります 。つまり、テキストの先頭でのみ一致します。