2010-02-01 4 views
27

In einem kleinen Skript, das ich mit SQLAlchemy und Elixir schreibe, muss ich alle eindeutigen Werte für eine bestimmte Spalte erhalten. In gewöhnlichen SQL würde es einfach eine Frage derSelektive Spaltenwerte in SQLAlchemy/Elixir auswählen

SELECT DISTINCT `column` FROM `table`; 

sein, und ich weiß, dass ich nur die Abfrage laufen konnte „manuell“, aber ich würde eher auf die SQLAlchemy deklarative Syntax-Stick (und/oder Elixir), wenn ich kann. Ich bin mir sicher, dass es möglich sein muss, ich habe in der SQLAlchemy-Dokumentation sogar Andeutungen auf diese Art von Dingen gesehen, aber ich habe diese Dokumentation stundenlang (und auch die von Elixir) durchforstet und kann es einfach nicht scheinen tatsächlich herauszufinden, wie es gemacht würde. Also was fehlt mir?

Antwort

59

Sie können Spalte Eigenschaften der abgebildeten Klassen abzufragen und die Query-Klasse hat eine generative distinct() Methode:

for value in Session.query(Table.column).distinct(): 
    pass 
+0

hm, naja ich hätte schwören können, dass ich es ausprobiert habe und es gab mir einen Fehler ... aber anscheinend nicht. Es funktioniert, danke! –

+0

Probieren Sie das, ich bekomme ein 'Query' Objekt ist nicht aufrufbar Fehler ...: \ Irgendeine Idee, was ich falsch machen könnte? – kafuchau

+2

Kchau: Könnte es sein, dass Sie versuchen, den Deskriptor query_property für eine Klasse anstelle der Suchmethode für Session aufzurufen? Also SomeClass.query (...) statt Session.query (...)? –

2
for user in session.query(users_table).distinct(): 
    print user.posting_id 
2

Für diese Klasse:

class Assurance(db.Model): 
    name = Column(String) 

Sie können dies tun:

assurances = [] 
for assurance in Assurance.query.distinct(Assurance.name): 
    assurances.append(assurance.name) 

und Sie werden die Liste der eindeutigen Werte haben