2016-06-04 17 views
1

Ich bin neu zu Python und SQLALCHEMY, und ich stieß auf diese Zweifel, ob wir Zeilen der Tabelle basierend auf Zelle Werte der Spalte der gleichen Tabelle filtern können . Beispiel:SQL Alchemy Filter Zeilen basierend auf den Werten in Zellen der anderen Spalte

Sbranch=value 
result=Transaction.query.filter(Transaction.branch==Sbranch) 
          .order_by(desc(Transaction.id)).limit(50).all() 

wenn der Wert von Sbranch=0, ich möchte das alle Zeilen unabhängig von Sbranch Wert lesen, sonst will ich zum Filtern von Zeilen mit enthält Transaction.branch==Sbranch.

Ich weiß, dass es durch den Vergleich der Werte von Sbranch (If-Else Bedingungen) erreicht werden kann, aber es wird kompliziert, wie die Anzahl solcher Spalten erhöht. Beispiel:

Sbranch=value1 
trans_by=value2 
trans_to=value3 
. 
. 
result=Transaction.query.filter(Transaction.branch==Sbranch,Transaction.trans_by==value2,Transaction_to==trans_to) 
.order_by(desc(Transaction.id)).limit(50).all() 

Ich möchte mit allen 3 Spalten ähnliche Filter anzuwenden.

Ich möchte wissen, ob es eine eingebaute Funktion in SQLALCHEMY für dieses Problem gibt.

Antwort

3

Optional können Sie die Filter hinzufügen, basierend auf dem Wert von SBranch

query = Transaction.query 
if SBranch != 0: 
    query = query.filter(Transaction.branch == SBranch) 

result = query.order_by(Transaction.id.desc()).limit(50).all() 
+0

Aber das wird kompliziert, wie ich die Tabelle mit mehr solcher Spalten filtern. Gerade jetzt möchte ich die Tabelle filtern, die auf Zellen solcher 6 Spalte basiert. – Harsha

+0

Eigentlich ist der Teil Ihrer Frage "eine andere Spalte"? – RazerM

+0

Sorry, es kann eine beliebige Spalte in der Tabelle sein. – Harsha

-1

Ich glaube, ich fand die Lösung, es ist nicht die beste, aber die Arbeit für die Entwickler (nicht der Prozessor) zu reduzieren.

Sbranch=value 
branches=[] 
if Sbranch==0: 
    # Append all the values into the array for which the rows are filtered 
    # for example: 
    branches=[1,2,4,7,3,8] 
else: 
    branches.append(branch) 

result=Transaction.query.filter(Transaction.branch.in_(branches)) 
          .order_by(desc(Transaction.id)).limit(50).all() 
Verwandte Themen