2012-03-27 5 views
2

Ich spiele mit SQL-Alchemie und ich muss etwas arbeiten, bevor SQLA SELECT-Anweisung ausführt. Also habe ich herausgefunden, dass der beste Weg wäre, SQLA-Event zu verwenden, aber ich kann kein passendes Vorher-Auswahl-Event finden. Ist es da, aber ich finde es schlecht.Sql Alchemy vor-select-Ereignis

Wenn es nicht da ist, kann mir jemand sagen, wie ich meine benutzerdefinierte Veranstaltung schreiben?

Thx für irgendwelche Vorschläge. Beste Grüße Gabe

+0

Welche Art von Arbeit müssen Sie dort machen? Ändern Sie die Abfrage selbst (wie einige allgemeine Filter oder laden Sie einige Daten eifrig)? – van

+0

: van thx für die Antwort. Was ich tun möchte, ist, jede Auswahl auf dem Tisch zu ergreifen und ihr meine kleine Änderung zu geben, bevor sie an DB gesendet wird. –

+1

Die Art der "kleinen Änderung" ist hier wichtig. Oft können Sie mit @compiles auf dem Select-Konstrukt arbeiten, wenn es sich um etwas handelt, das einfach ist und sich immer auf einer bestimmten Tabelle befindet. Wenn Sie sich im ORM befinden, kann auch eine Query-Unterklasse verwendet werden, siehe http://www.sqlalchemy.org/trac/wiki/UsageRecipes/PreFilteredQuery – zzzeek

Antwort

1

Es tut mir so leid für eine Weile nicht zu schreiben, aber vor einiger Zeit habe ich getan, was ich tun wollte. Ich denke nicht, wenn es ein eleganter Weg ist, aber es funktioniert.

Also, was ich tat, ist meine eigene Session-Klasse zu schreiben:

class MySession(Session): 

    def execute(self, clause, params=None, mapper=None, **kw): 
     # Your magic with clause here 
     return Session.execute(self, clause, params, mapper) 

Dann müssen Sie Ihre Sitzung wie folgt erstellen:

Session = sessionmaker(engine, class_ = MySession) 

Hoffnung, dass es jemanden, der mit ähnlichem Problem zu kämpfen helfen :)

Grüße

Ps Danke an alle, die zu dieser Frage beigetragen haben.

Verwandte Themen