Je me demandais où écrire le post-traitement à chaque fois, comme SELECTing quelque chose puis le traiter pour l'affichage, dans SQL Alchemy.
Jusqu'à présent, la méthode self-made basée sur SELECT était prise en charge en attachant explicitement un décorateur self-made pour le post-traitement. Mais avec cela, si vous utilisez une relation ou quelque chose et qu'il est SELECTé en plus d'une autre table, il ne passera pas par la logique auto-faite de post-traitement. Évidemment. Veuillez être incroyable.
Au lieu de cela, je veux être sûr d'exécuter le processus dès qu'il est sélectionné, quelles que soient les circonstances.
Je me suis demandé s'il y avait quelque chose comme after_find dans Rails, quelque chose de similaire à un événement dans SQLAlchemy, mais j'ai fait un peu de recherche, mais je n'ai trouvé personne qui le faisait, et finalement l'été était l'automne et toutes les demi-finales sont mortes. En deuil, j'ai finalement soulevé mon poids et vérifié la page officielle.
Eh bien, est-ce proche de l'événement de chargement?
test.py
class Tests(ModelsBase, Base):
__tablename__ = 'test'
id = Column(Integer, primary_key=True)
name = Column(Text)
status = Column(SmallInteger, server_default='1')
insert_date = Column(DateTime, server_default=func.now())
update_date = Column(DateTime, server_default=func.now(), onupdate=func.current_timestamp())
def __repr__(self):
return '<Tests id:{0}, name:{1}>'.format(self.id, name)
def tests_load_listener(target, context):
#target est une instance de Tests.
#Traitement pour l'affichage, croissance des attributs
if target.name:
target.name_for_disp = target.name + 'm'
else:
target.name_for_disp = 'Nanashi-kun'
event.listen(Tests, 'load', tests_load_listener)
La plupart du temps, les événements se produiront pour le nombre de cas sélectionnés, donc si vous n'y pensez pas, vous mourrez, mais j'étais satisfait.
En plus de load, il y a aussi une actualisation, qui est appelée à chaque fois qu'il y a un changement dans l'attribut, donc si vous ajoutez également ceci, cela peut être cool comme ça, il sera prêt immédiatement après UPDATE. ..
Il y a eu de nombreux autres événements. http://docs.sqlalchemy.org/en/latest/orm/events.html
C'est tout.