[PYTHON] Fügen Sie nach SELECT mit SQL Alchemy einen festen Prozess ein

Ich habe mich gefragt, wo ich die Nachbearbeitung für jedes Mal schreiben soll, z. B. etwas auswählen und dann für die Anzeige in SQL Alchemy verarbeiten soll.

Bisher wurde die SELECT-basierte selbst erstellte Methode unterstützt, indem explizit ein selbst erstellter Dekorator für die Nachbearbeitung angehängt wurde. Wenn Sie jedoch eine Beziehung oder etwas verwenden und diese zusätzlich zu einer anderen Tabelle AUSGEWÄHLT ist, wird die selbst erstellte Nachbearbeitungslogik nicht durchlaufen. Offensichtlich. Bitte sei großartig.

Stattdessen möchte ich sicherstellen, dass der Prozess ausgeführt wird, sobald er AUSGEWÄHLT ist, unabhängig von den Umständen.

Ich fragte mich, ob es in Rails so etwas wie after_find gab, ähnlich einem Ereignis in SQLAlchemy, aber ich recherchierte ein wenig, konnte aber niemanden finden, der es tat, und schließlich war Sommer Herbst und das ganze Halbfinale starb. In Trauer hob ich endlich mein Gewicht und überprüfte die offizielle Seite.

Nun, ist es nahe am Ladeereignis?

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):
	#Ziel ist eine Instanz von Tests.
    #Verarbeitung zur Anzeige, Attributwachstum
    if target.name:
		target.name_for_disp = target.name + 'Herr'
    else:
		target.name_for_disp = 'Nanashi-Kun'

event.listen(Tests, 'load', tests_load_listener)

Meistens treten Ereignisse für die Anzahl der ausgewählten Fälle auf. Wenn Sie also nicht darüber nachdenken, werden Sie sterben, aber ich war zufrieden.

Neben dem Laden gibt es auch eine Aktualisierung, die jedes Mal aufgerufen wird, wenn sich das Attribut ändert. Wenn Sie dies also hinzufügen, kann es so cool sein, dass es sofort nach dem UPDATE fertig ist. ..

Es gab viele andere Ereignisse. http://docs.sqlalchemy.org/en/latest/orm/events.html

Das ist es.

Recommended Posts

Fügen Sie nach SELECT mit SQL Alchemy einen festen Prozess ein
So konvertieren Sie ein Klassenobjekt mit SQLAlchemy in ein Wörterbuch
Wie man einen bestimmten Prozess am Anfang und Ende der Spinne mit Scrapy einfügt