Maison > base de données > tutoriel mysql > Pourquoi mes données SQLAlchemy ne sont-elles pas mises à jour après les avoir modifiées dans la base de données ?

Pourquoi mes données SQLAlchemy ne sont-elles pas mises à jour après les avoir modifiées dans la base de données ?

Barbara Streisand
Libérer: 2024-11-28 20:40:12
original
323 Les gens l'ont consulté

Why Doesn't My SQLAlchemy Data Update After I Change it in the Database?

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)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal