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.
aber gibt es eine Möglichkeit, eine Zeichenfolge als primaryjoin zu verwenden?
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%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!)
Tags und Links python sqlalchemy