2012-05-05 2 views
0

SQLAlchemy에서 .first()와 [0] 사이의 성능 차이가 있습니까?

a = session.query(Accounts).filter(Accounts.key = 4).first() 

a = session.query(Accounts).filter(Accounts.key = 4)[0] 

의 차이?

query = session.query(Accounts).filter(Accounts.key = 4) 
a = list(query[0:1])[0] 
+0

왜 시도해 보지 않으시겠습니까? –

+0

몇 가지 사례를 시도했지만 큰 차이점을 발견하지는 못했지만 SQLAlchemy를 처음 접했고 Python을 처음 사용하는 사람은별로 없습니다. 누군가가 어떤 엣지 케이스 또는 일반적인 지혜 (eval을 사용하는 것을 피하는 라인을 따라)를 알고 있을지도 모른다고 생각했습니다. – adamek

답변

1

@mata가 표시 및 소스에 지적 : 위의 호출을 모두 기본적으로 같은 반환 :

+0

아름다운. 나는 아직 Query.get 메서드를 발견하지 못했다. 그리고 객체가 이미 메모리에 있다면 더 빠를 것입니다. – adamek

4

분명히 힌트 __gettitem__ 또는 first

을 useing 사이에 많은 차이가없는 코드의 경우 두 가지의 실행 경로에 차이가 없습니다. 사실, 당신은 또한 당신이 엔진을 만들 때 echo=True을 설정하여 SQL 로깅을 활성화 할 수 있습니다, 당신은 Accounts.key 실제로 차있는 경우 SQL 문이 모두 정확히 (일부 SELECT ... FROM ... WHERE ....id = ? LIMIT ? OFFSET ?의 일종)

그러나 동일한 것을 볼 수 있습니다 키를 사용하는 경우 기본 키를 사용하여 영구 인스턴스를 얻는 가장 좋은 방법은 메서드를 사용하는 것입니다.이 메서드는 SELECT ... FROM ... WHERE ....id = ?을 생성하므로 충분히 좋습니다. 나는 그것이 더 빠를 것이라고는 생각하지 않지만 훨씬 더 깨끗합니다.

+0

분명히 ... 그러나 당신은 어떤 증거를 제공 할 수 있습니까? –

+1

관련 소스 섹션에 연결했습니다. 너 더 필요한 증거가 뭐야? 단지 내 대답에 대한 짧은 설명을 추가했습니다. – mata

관련 문제