ホームページ  >  記事  >  データベース  >  SQLAlchemy は、個別の挿入ではなく、単一の SQL ステートメントのような最適化された一括挿入をどのように実現できますか?

SQLAlchemy は、個別の挿入ではなく、単一の SQL ステートメントのような最適化された一括挿入をどのように実現できますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-09 20:00:03962ブラウズ

How can SQLAlchemy achieve optimized bulk insertions like a single SQL statement instead of individual insertions?

SQLAlchemy ORM での最適化された一括挿入

質問:

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。