2014-02-14 3 views
-3

SQLAlchemy 쿼리 결과를 얻으려고합니다. 쿼리를 반복하면 목록에 결과를 넣을 수 있지만 (아래) 결과가 많은 경우 결과가 단일 숫자가 될 때 비효율적 인 것처럼 보입니다 (아래 참조). 쿼리 결과를 반환하는보다 직접적이고 효율적인 방법이 있습니까?SQLAlchemy 검색 쿼리 결과 반환

mylist = [] 
for item in session.query(func.max(mytable.id)): 
    mylist.append(item) 
+1

반환 결과? 색인 생성이 필요합니까, 아니면 충분히 반복 할 수 있습니까? 하나의 결과에 대해 * 못 생겼다고 생각하십니까? –

답변

3

결과를 반복하면 결과가 정확합니다. all()을 사용하여 시퀀스 (행) 목록을 가져올 수도 있습니다. 보다 효율적인 방법은 목록에 데이터를 저장하지 않고 작은 결과 집합을 가져 오거나 각 행에서 즉시 작업을 수행하는 것입니다. DBMS가 지원하는 경우 서버 측 커서를 사용할 수도 있습니다.

한 필드가있는 행을 하나만 가져 오는 경우 first()을 사용하여 반환 된 시퀀스의 첫 번째 요소를 가져올 수 있습니다. 코드 현명한, 이것은 아마도 가장 효율적입니다 :

maxid_mytable = session.query(func.max(mytable.id)).first()[0] 
+0

이것은 단일 결과의 인스턴스에서는 더 낫지 만 n> 1에서는 작동하지 않을 것입니다. – Michael

+0

@Michael 그러면 @geertjanvdk와 같이'.all()'을 사용했습니다. – ACV

1

이 정확히 무엇인지에 동등

mylist = session.query(func.max(mytable.id)).all()