2010-02-01 14 views
27

En un pequeño script que estoy escribiendo usando SQLAlchemy y Elixir, necesito obtener todos los valores distintivos para una columna en particular. En SQL ordinaria que sería una simple cuestión deSeleccionar distintos valores de columna en SQLAlchemy/Elixir

SELECT DISTINCT `column` FROM `table`; 

y sé que sólo podía funcionar esa consulta "manualmente", pero prefiero adhieren a la sintaxis declarativa SQLAlchemy (y/o Elixir) si poder. Estoy seguro de que debe ser posible, incluso he visto alusiones a este tipo de cosas en la documentación de SQLAlchemy, pero he estado buscando esa documentación durante horas (así como la de Elixir) y no puedo parece que realmente descifrar cómo se haría. Entonces, ¿qué me estoy perdiendo?

Respuesta

59

Puede consultar las propiedades de las columnas de las clases asignadas y la clase de consulta tiene un generador distinct() método:

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

hm, bueno, podría haber jurado, lo intenté y me dio un error ... pero aparentemente no. Funciona, gracias! –

+0

Probando eso, obtengo un objeto 'Query' no es un error invocable ...: \ ¿Alguna idea de lo que puedo estar haciendo mal? – kafuchau

+2

kchau: ¿podría ser que esté tratando de llamar al descriptor query_property en una clase en lugar del método de consulta en Session? Entonces SomeClass.query (...) en lugar de Session.query (...)? –

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

Para esta clase:

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

usted puede hacer esto:

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

y tendrá la lista de valores distintos

Cuestiones relacionadas