Wie implementiere ich einen Null-Koaleszenzoperator in SQLAlchemy?

10

Oder wie mache ich das Ding funktionieren?

Ich habe ein Interval-Objekt:

%Vor%

Und eine Aufgabe:

%Vor%

Fügen Sie natürlich den typischen Setup-Code hinzu.

Wenn ich versuche, session.query(Task).filter(Task.hours_spent > 3).all()

zu machen

Ich bekomme NotImplementedError: <built-in function getitem> von der sum(i.hours_spent... -Zeile.

Ich schaute also diesen Teil des Dokumentation und theoretisiert, dass es vielleicht eine Möglichkeit gibt, dass ich etwas schreiben kann, das tun wird, was ich will. Dieser Teil sieht auch so aus, als könnte er nützlich sein und ich werde es mir ansehen, während ich auf eine Antwort hier warte;)

    
Wayne Werner 07.08.2013, 11:23
quelle

2 Antworten

6

SQLAlchemy ist nicht intelligent genug, um SQL-Ausdrucksbaum aus diesen Operanden zu erstellen, Sie müssen explizit propname.expression decorator verwenden, um es bereitzustellen. Aber dann kommt ein anderes Problem: Es gibt keinen portablen Weg, um Intervall in Stunden in Datenbank zu konvertieren. Sie würden TIMEDIFF in MySQL, EXTRACT(EPOCH FROM ... ) / 3600 in PostgreSQL usw. verwenden. Ich empfehle, Eigenschaften zu ändern, um stattdessen timedelta zurückzugeben und Äpfel mit Äpfeln zu vergleichen.

%Vor%

Die letzte Abfrage lautet:

%Vor%

was zu (im PostgreSQL-Backend) übersetzt:

%Vor%     
rkhayrov 07.08.2013, 12:01
quelle
5

Für ein einfaches Beispiel der Koaleszenzfunktion von SQLAlchemy kann dies hilfreich sein: Behandlung von null Werte in einer SQLAlchemy-Abfrage - äquivalent zu isnull, nullif oder coalesce .

Hier sind ein paar Schlüsselzeilen des Beitrags:

%Vor%     
Steve Saporta 06.06.2014 14:37
quelle