Maison >base de données >tutoriel mysql >Comment SQLAlchemy peut-il réaliser des insertions groupées optimisées comme une seule instruction SQL au lieu d'insertions individuelles ?

Comment SQLAlchemy peut-il réaliser des insertions groupées optimisées comme une seule instruction SQL au lieu d'insertions individuelles ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-09 20:00:03991parcourir

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

Insertions groupées optimisées dans SQLAlchemy ORM

Question :

SQLAlchemy peut-il effectuer des insertions groupées, similaires à une seule instruction SQL (INSERT INTO foo (bar) VALUES (1), (2), (3)), au lieu d'exécuter des insertions pour chaque objet ?

Réponse :

SQLAlchemy version 1.0.0 a introduit des opérations en masse, y compris des insertions et des mises à jour en masse.

En masse Insertions :

Dans la version 1.0.0 et versions ultérieures, SQLAlchemy prend en charge les insertions groupées à l'aide de la méthode Bulk_save_objects() :

s = Session()
objects = [
    User(name="u1"),
    User(name="u2"),
    User(name="u3")
]
s.bulk_save_objects(objects)
s.commit()

Ce code effectuera une seule opération d'insertion groupée pour ajouter les trois objets utilisateur.

Efficacité améliorée :

L'utilisation d'insertions groupées améliore considérablement les performances par rapport à l'exécution d'insertions séparées pour chaque objet.

Données et transactions obsolètes :

Pour maintenir la cohérence des données, utilisez des sessions avec autocommit=False. Lorsque vous validez manuellement une transaction à l'aide de session.commit(), SQLAlchemy vide les objets modifiés et récupère les enregistrements mis à jour lors des requêtes suivantes. Cependant, les modifications de la base de données provenant de sources externes peuvent toujours entraîner des problèmes de données obsolètes. Pour atténuer ce problème, envisagez d'utiliser des verrous de base de données pour garantir la cohérence transactionnelle.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn