Surmonter la mise en cache des données ORM dans SQLAlchemy
Lors de l'utilisation de SQLAlchemy pour la gestion des données, les utilisateurs peuvent rencontrer un problème de mise en cache perçu dans lequel les données récupérées restent inchangées malgré mises à jour effectuées directement dans la base de données. Cela peut être une situation difficile.
Le cache dévoilé : comprendre l'isolation des transactions
Le comportement observé n'est pas dû à un cache explicite dans SQLAlchemy, mais plutôt à une caractéristique fondamentale d’isolement des transactions. Par défaut, SQLAlchemy fonctionne en mode transactionnel. Les modifications de données ne sont écrites dans la base de données que lors de l'appel de session.commit().
Cependant, l'isolation des transactions introduit une particularité. Bien que les autres transactions actives ne puissent pas accéder immédiatement aux données modifiées, elles peuvent également ne pas pouvoir les voir même après avoir validé ou annulé leurs propres transactions. Ce phénomène, connu sous le nom de lectures répétables, garantit que les transactions conservent l'état dans lequel elles ont été chargées, même lorsque les données réelles ont changé.
Désactivation de la mise en cache perçue
Pendant Il ne s'agit pas d'un véritable cache, les effets de l'isolation des transactions peuvent être atténués en utilisant le regroupement de connexions. En vous assurant que toutes les connexions proviennent d'un pool commun, vous pouvez éviter la mise en cache des données entre différentes connexions et améliorer la visibilité des mises à jour. Pour activer le regroupement de connexions, définissez le paramètre pool_recycle sur une valeur non nulle.
Par exemple :
engine = create_engine('mysql://user:password@host/db', pool_recycle=3600)
Dans ce cas, les connexions seront recyclées toutes les 3 600 secondes, évitant ainsi les problèmes de mise en cache des données. lié à l'isolement des transactions.
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!