2010-02-01 12 views
27

In un piccolo script che sto scrivendo usando SQLAlchemy ed Elixir, ho bisogno di ottenere tutti i valori distinti per una particolare colonna. In SQL ordinaria sarebbe una semplice questione diSelezione di valori di colonna distinti in SQLAlchemy/Elixir

SELECT DISTINCT `column` FROM `table`; 

e so ho potuto solo correre che query "manualmente", ma preferirei bastone alla sintassi dichiarativa SQLAlchemy (e/o Elixir) se io può. Sono sicuro che deve essere possibile, ho persino visto delle allusioni a questo genere di cose nella documentazione di SQLAlchemy, ma sono stato a caccia di quella documentazione per ore (oltre a quella di Elixir) e non posso proprio sembra davvero capire come sarebbe fatto. Quindi cosa mi sto perdendo?

risposta

59

È possibile eseguire una query proprietà delle colonne di classi mappate e la classe di query ha un generativa distinct() metodo:

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

hm, beh avrei potuto giurare di averlo provato e mi ha dato un errore ... ma apparentemente no. Funziona, grazie! –

+0

Provare che, ottengo un oggetto 'Query' non è l'errore callable ...: \ Qualche idea su cosa potrei fare male? – kafuchau

+2

kchau: potrebbe essere che stiate provando a chiamare il descrittore query_property su una classe invece del metodo query su Session? Quindi SomeClass.query (...) invece di Session.query (...)? –

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

Per questa classe:

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

si può fare questo:

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

e avrai la lista dei valori distinti