ホームページ >データベース >mysql チュートリアル >SQLAlchemy は、個別の挿入ではなく、単一の SQL ステートメントのような最適化された一括挿入をどのように実現できますか?
質問:
SQLAlchemy は単一の SQL ステートメントと同様の一括挿入を実行できますか(INSERT INTO foo (bar) VALUES (1)、(2)、 (3))、オブジェクトごとに個別の挿入を実行する代わりに?
回答:
SQLAlchemy バージョン 1.0.0 では、一括挿入や一括更新を含む一括操作が導入されました。
バルク挿入:
バージョン 1.0.0 以降では、SQLAlchemy はBulk_save_objects() メソッドを使用した一括挿入をサポートしています:
s = Session() objects = [ User(name="u1"), User(name="u2"), User(name="u3") ] s.bulk_save_objects(objects) s.commit()
このコードは、追加する単一の一括挿入操作を実行します。 3 つのユーザー オブジェクトすべて。
改善されました効率:
一括挿入を使用すると、オブジェクトごとに個別の挿入を実行する場合に比べてパフォーマンスが大幅に向上します。
古いデータとトランザクション:
データの一貫性を維持するには、autocommit=False でセッションを使用します。 session.commit() を使用してトランザクションを手動でコミットすると、SQLAlchemy は変更されたオブジェクトをフラッシュし、後続のクエリ中に更新されたレコードをフェッチします。ただし、外部ソースからデータベースを変更すると、依然としてデータが古いという問題が発生する可能性があります。これを軽減するには、データベース ロックを使用してトランザクションの一貫性を確保することを検討してください。
以上がSQLAlchemy は、個別の挿入ではなく、単一の SQL ステートメントのような最適化された一括挿入をどのように実現できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。