Wie fügt man einer Relation mit SQLAlchemy einen automatischen Filter hinzu?

8

Ich benutze SQLAlchemy 0.5rc, und ich würde gerne einen automatischen Filter zu einer Relation hinzufügen, so dass jedes Mal, wenn es versucht, Datensätze für diese Relation abzurufen, die "entfernten" ignoriert werden, wenn sie markiert sind als "logically_deleted" (ein boolesches Feld der Kindtabelle)

Zum Beispiel, wenn ein Objekt "Eltern" eine "Kinder" Relation besitzt 3 Datensätze, aber einer von ihnen ist logisch gelöscht, wenn ich nach "Eltern" abfragen möchte ich SQLA Holen Sie das Elternobjekt mit nur zwei Kindern ..
Wie soll ich das machen? Durch Hinzufügen einer "und" -Bedingung zum primären Join Parameter der Beziehung? (z.B. " Children.parent_id == Parent.id and Children.logically_deleted == False ", aber ist es richtig, auf diese Weise "und" zu schreiben?)

Bearbeiten:
Ich habe es auf diese Weise geschafft.

%Vor%

aber gibt es eine Möglichkeit, eine Zeichenfolge als primaryjoin zu verwenden?

    
Joril 06.11.2008, 07:33
quelle

3 Antworten

3

Die Funktion and_ () ist der richtige Weg, logische Verknüpfungen in SQLAlchemy zusammen mit dem & amp; Sie sollten jedoch Vorsicht walten lassen, da es überraschende Vorrangregeln, d. h. eine höhere Priorität als Vergleichsoperatoren, aufweist.

Sie könnten auch einen String als primären Join mit dem text () -Konstruktor verwenden, aber das würde Ihren Code mit jedem Tabellen-Aliasing brechen, der mit equilerloading und Joins einhergeht.

Für das logische Löschen ist es möglicherweise besser, die gesamte Klasse einer Auswahl zuzuordnen, die gelöschte Werte ignoriert:

%Vor%     
Ants Aasma 10.11.2008, 18:23
quelle
6
  

aber gibt es eine Möglichkeit, eine Zeichenfolge als primaryjoin zu verwenden?

Sie können Folgendes verwenden:

%Vor%

Das hat für mich funktioniert!

    
Stanislav 14.12.2012 23:51
quelle
0

Ich entwickle derzeit nur 0.4. etwas, aber hier ist, wie ich es vorschlagen würde:

%Vor%

Ich denke, das ist es, was Sie versuchen, richtig?

(Hinweis: in einem Webbrowser geschrieben, nicht echter Code!)

    
Matthew Schinckel 06.11.2008 08:48
quelle

Tags und Links