sql >> データベース >  >> RDS >> PostgreSQL

SQLAlchemyを介してPostgresqlで複数のステートメントを実行しても、変更は永続化されません

    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に対して正規表現が一致することがわかります 。つまり、テキストの先頭でのみ一致します。



    1. Oracleデータベースにファイルを挿入する方法は?

    2. 列のコンマ区切り値をSQLServerの複数の行に分割する

    3. データベースリンクを介してOracleストアドプロシージャを実行する方法

    4. 非常に大規模なデータベースをアンロードする