[PYTHON] Insérer un processus fixe après SELECT avec SQL Alchemy

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.

Recommended Posts

Insérer un processus fixe après SELECT avec SQL Alchemy
Comment convertir un objet de classe en dictionnaire avec SQLAlchemy
Comment insérer un processus spécifique au début et à la fin de l'araignée avec la tremblante