Maison > base de données > tutoriel mysql > Comment puis-je désactiver la mise en cache SQLAlchemy pour éviter les incohérences des données ?

Comment puis-je désactiver la mise en cache SQLAlchemy pour éviter les incohérences des données ?

Barbara Streisand
Libérer: 2024-11-29 02:29:10
original
834 Les gens l'ont consulté

How Can I Disable SQLAlchemy Caching to Prevent Data Inconsistencies?

Résoudre les problèmes de mise en cache avec SQLAlchemy

Lors de l'utilisation de SQLAlchemy pour insérer et récupérer des données d'une base de données, des problèmes de mise en cache peuvent survenir, entraînant des incohérences. Cet article étudie les causes courantes et propose une solution pour désactiver la mise en cache dans SQLAlchemy.

Comprendre la mise en cache de SQLAlchemy

SQLAlchemy maintient une carte d'identité au sein de chaque transaction, qui agit comme un cache pour les objets récemment consultés. Cela optimise les performances en empêchant plusieurs requêtes de base de données pour les mêmes données. Cependant, lorsque les données sont mises à jour en externe vers SQLAlchemy, ce cache peut provoquer des problèmes en renvoyant des résultats obsolètes.

Désactivation de la mise en cache

Pour résoudre ce problème, il est nécessaire de désactiver mise en cache dans SQLAlchemy. Ceci peut être réalisé en définissant l'indicateur expire_on_commit sur True dans la configuration du mappeur. Le code suivant montre comment procéder :

# Import the ORM classes
from sqlalchemy import Column, Integer, String, create_engine, sessionmaker

# Create an engine and session factory
engine = create_engine('mysql+pymysql://username:password@host/database')
Session = sessionmaker(bind=engine)

# Define the User class
class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)

    __mapper_args__ = {
        'expire_on_commit': True
    }
Copier après la connexion

En définissant expire_on_commit sur True, SQLAlchemy fera expirer tous les objets de la carte d'identité lors de la validation. Cela garantit que les données les plus récentes sont toujours récupérées de la base de données.

Exemple

Considérez le scénario décrit dans la question d'origine :

# Create a session
session = Session()

# Insert data into the database
new_user = User(name='John Doe')
session.add(new_user)
session.commit()

# Update the data directly in the database
connection = engine.connect()
cursor = connection.cursor()
cursor.execute("UPDATE users SET name='Jane Doe' WHERE>
Copier après la connexion

Avec la mise en cache désactivée, SQLAlchemy renverra l'enregistrement utilisateur mis à jour (Jane Doe) au lieu de l'enregistrement mis en cache obsolète (John Doe). Cela résout le problème de mise en cache et garantit que l'application récupère toujours les dernières données de la base de données.

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