A propos de l'actualisation des objets dans la session sqlalchemy
Bien, je fais affaire avec un doute sur sqlalchemy et objets rafraîchissant!
Je suis dans la situation que j'ai 2 sessions, et le même objet a été interrogé dans les deux séances!... Quelque chose en particulier, je ne peux pas fermer l'un de ces séances.
J'ai modifié l'objet et engage les modifications dans la session A, mais dans la session B, les attributs sont les initiales de! sans modifications!..
Donc... vais-je mettre en œuvre une sorte de système de notification pour communiquer des changements ou il y a un moyen intégré pour ce faire, dans sqlalchemy??
source d'informationauteur Cristián Pérez
Vous devez vous connecter pour publier un commentaire.
Les séances sont conçues pour fonctionner comme ceci. Les attributs de l'objet en Session B VA garder ce qu'il avait lors de la première interrogé en Séance de B. de plus, SQLAlchemy de ne pas tenter d'actualiser automatiquement les objets dans d'autres sessions quand ils changent, je ne crois pas qu'il serait sage d'essayer de créer quelque chose comme ça.
Vous devez être activement à la pensée de la durée de vie de chaque session comme une seule transaction dans la base de données. Comment et quand les sessions doivent composer avec le fait que leur but est peut-être périmée n'est pas un problème technique qui peut être résolu par un algorithme intégré dans SQLAlchemy (ou de toute prorogation de SQLAlchemy): c'est un "business" problème dont la solution, que vous devez déterminer et code vous-même. La "bonne" réponse pourrait être de dire que ce n'est pas un problème: la logique qui se produit avec la Session B peut être valable que si elle a utilisé les données au moment de la Session B commencé. Votre "problème" n'est pas un problème. Les docs ont en fait un toute la section sur le moment d'utiliser les sessionsmais il donne une assez sombres réponse si vous êtes l'espoir pour un one-size-fits-all solution...
Cela dit, il ya quelques choses que vous pouvez faire pour changer la façon dont la situation de travaux:
Tout d'abord, vous pouvez réduire la durée de votre session reste ouverte. Session B est l'interrogation de l'objet, puis, plus tard, vous faites quelque chose avec cet objet (dans la même session que vous voulez avoir les attributs de l'être jusqu'à ce jour. Une solution est d'avoir cette deuxième opération effectuée dans une autre session.
Une autre est d'utiliser l'expiration/actualiser les méthodes, comme la docs montrer...
Vous pouvez utiliser
session.refresh()
immédiatement en obtenir une version à jour de l'objet, même si la session est déjà interrogé sur l'objet plus tôt.De l'exécuter, à force de session de mise à jour de la dernière valeur de votre base de données de choix:
Excellent DOC sur le comportement par défaut et la durée de vie de la session