web-dev-qa-db-fra.com

Sélection de valeurs de colonne distinctes dans SQLAlchemy / Elixir

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 le SQL ordinaire, ce serait une simple question de

SELECT DISTINCT `column` FROM `table`;

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

41
David Z

Vous pouvez interroger les propriétés de colonne des classes mappées et la classe Query a une méthode générative distinct():

for value in Session.query(Table.column).distinct():
     pass
81
Ants Aasma

Pour cette classe:

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

tu peux le faire:

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

et vous aurez la liste des valeurs distinctes

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