Sqlalchemy Mixins / und Event Listener

8

Ich versuche zwei neue Dinge auf einmal, so dass die Unterstützung sowohl bei der Vereinfachung als auch bei der Klärung geschätzt wird.

%Vor%

Ich möchte also einen Mix erstellen, den ich in jeder Klasse anwenden kann:

%Vor%

Diese Klasse erbt Funktionen, die bei der Erstellung einen Zeitstempel erstellen und beim Aktualisieren einen Zeitstempel erstellen / ändern.

Beim Import erhalte ich diesen Fehler:

%Vor%

aaaund ich bin an dieser Stelle ratlos.

    
blueblank 05.10.2012, 20:17
quelle

4 Antworten

12

Hier ist, was ich tun würde, um before_insert -Ereignisse anzuhören: füge einen classmethod zu deinem TimeStampMixin hinzu, der die aktuelle Klasse registriert und die Erstellung der Zeit übernimmt.

z. B.

%Vor%

So können Sie:

  1. Erweitern und ändern Sie leicht, worauf Sie hören und was Sie registrieren.
  2. Überschreibe die Methode create_time für bestimmte Klassen
  3. Seien Sie explizit darüber, welche Methoden ihre Zeitstempel haben müssen.

Sie können es einfach verwenden:

%Vor%

Einfach, sehr klar, keine Magie, aber kapselt immer noch ein, wie Sie wollen.

    
Jeff Tratner 05.10.2012, 21:09
quelle
35

Fügen Sie Ihren Listener innerhalb der Klassenmethode an und er wird das Ereignis an die Kindklasse anhängen.

%Vor%     
deBrice 29.11.2012 01:52
quelle
2

Sie können es auch so machen:

%Vor%

und definieren Sie Ihre Klassen wie:

%Vor%     
Raul Gomez 06.10.2012 17:04
quelle
0

Der beste Weg in der modernen SqlAlchemy ist die Verwendung des @listens_for Dekorators mit propagate=True .

%Vor%     
Mike Haboustak 22.05.2017 19:40
quelle

Tags und Links