2010-02-01 4 views
27

Dans un petit script que j'écris en utilisant SQLAlchemy et Elixir, j'ai besoin d'obtenir toutes les valeurs distinctes pour une colonne particulière. Dans SQL ordinaire, il serait une simple question deSélection de valeurs de colonne distinctes dans SQLAlchemy/Elixir

SELECT DISTINCT `column` FROM `table`; 

et je sais que je pouvais exécuter cette requête « manuellement », mais je préfère coller à la SQLAlchemy syntaxe déclarative (et/ou Elixir) si je pouvez. Je suis sûr que ce doit être possible, j'ai même vu des allusions à ce genre de choses dans la documentation de SQLAlchemy, mais j'ai cherché cette documentation pendant des heures (ainsi que celle d'Elixir) et je ne peux pas semblent vraiment comprendre comment cela serait fait. Alors qu'est-ce qui me manque?

Répondre

59

Vous pouvez interroger les propriétés des colonnes de classes cartographiées et la classe de requête a une méthode distinct() générative:

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

hm, eh bien je pourrais avoir juré j'ai essayé cela et il m'a donné une erreur ... mais apparemment pas. Cela fonctionne, merci! –

+0

En essayant cela, je reçois un objet «requête» n'est pas une erreur appelable ...: \ N'importe quelle idée de ce que je peux faire mal? – kafuchau

+2

kchau: est-ce que vous essayez d'appeler le descripteur query_property sur une classe au lieu de la méthode de requête sur Session? Donc SomeClass.query (...) au lieu de Session.query (...)? –

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

Pour cette classe:

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

vous pouvez faire ceci:

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

et vous aurez la liste des valeurs distinctes

Questions connexes