2010-02-01 4 views
27

SQLAlchemy 및 Elixir을 사용하여 작성한 간단한 스크립트에서 특정 열에 대해 고유 한 값을 모두 가져와야합니다. 일반 SQL에서 그것은SQLAlchemy/Elixir에서 고유 한 열 값 선택

SELECT DISTINCT `column` FROM `table`; 

의 간단한 문제가 될 것입니다 그리고 난 그냥 쿼리를 실행할 수 있습니다 알고있다 "수동"하지만 난 경우 차라리 SQLAlchemy의 선언적 구문에 충실 (및/또는 엘릭서) 것 양철통. 나는 그것이 가능해야한다고 확신한다. SQLAlchemy 문서에서 이런 종류의 암시를 보았다. 그러나 필자는 그 문서를 몇 시간 동안 찾아 보았고 (필자도 그렇다) 나는 그럴 수 없다. 그것이 실제로 어떻게 될지 알아내는 것 같습니다. 그래서 나는 무엇을 놓치고 있습니까?

답변

59

당신은 매핑 클래스의 열 속성을 조회 할 수 있습니다 및 쿼리 클래스는 생식 distinct() 방법이 있습니다

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

hm, 음, 나는 그걸 시도해 보았습니다. 그리고 그것은 나에게 오류를주었습니다 ... 그러나 분명히 아닙니다. 고마워! –

+0

그걸 시도하면 'Query'객체가 호출 할 수없는 오류가 발생합니다. : \ 내가 잘못 생각한 것일 수도 있습니다. – kafuchau

+2

kchau : Session의 query 메소드 대신 class에 query_property 디스크립터를 호출하려고 할 수 있습니까? 그래서 SomeClass.query (...) 대신 Session.query (...)? –

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

이 클래스 :

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

당신은이 작업을 수행 할 수 있습니다

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

그리고 당신은 독특한 값의 목록을 가지고있을 것입니다.