2008-10-27 12 views
7

익명 사용자에 대한 링크를 저장하는 Google App Engine 데이터 저장소에 엔티티가 있다고 가정 해 보겠습니다.Python : GQuery 결과 집합에 대한 DISTINCT (GQL, GAE)

SELECT DISTINCT user_hash FROM links 

이 대신 당신이 사용할 수 있습니다 : 당신은 지원되지 않습니다 다음 SQL 쿼리를 수행하고자하는

user = db.GqlQuery("SELECT user_hash FROM links") 

는 결과를 필터링하는 데 가장 효율적으로 파이썬 사용하는 방법을, 그래서 DISTINCT 결과 집합을 반환합니까? DISTINCT 결과 집합을 계산하는 방법은 무엇입니까?

답변

3

세트가 처리하는 좋은 방법입니다 : w

>>> a = ['google.com', 'livejournal.com', 'livejournal.com', 'google.com', 'stackoverflow.com'] 
>>> b = set(a) 
>>> b 
set(['livejournal.com', 'google.com', 'stackoverflow.com']) 
>>> 

한 가지 제안을 /를 첫 번째 대답 t R/세트와 dicts 신속 독특한 결과를 검색에서 더 나은 것입니다, 목록에있는 회원은 O입니다 O 대 (N) (1) 다른 유형, 그래서 당신은 추가 데이터를 저장하거나 언급 unique_results 목록을 작성,이 같은 것을 할 것이 더있을 수 있습니다 같은 것을 수행하려는 경우 :

unique_results = {} 
>>> for item in a: 
    unique_results[item] = '' 


>>> unique_results 
{'livejournal.com': '', 'google.com': '', 'stackoverflow.com': ''} 
+0

set 객체는 일련의 고유 한 해시 가능 객체 모음입니다 (...) 버전 2.4의 새로운 기능입니다. http://www.python.org/doc/2.5.2/lib/types-set.html –

+1

레코드 수가 비교적 적은 경우 설정하는 것이 좋습니다. 그러나 데이터 저장소에 레코드 수가 많으면 매우 비효율적입니다. 훨씬 더 나은 전략은 삽입/업데이트 시간에 결과를 미리 계산하고 저장하는 것입니다. – sudarkoff

1

하나의 옵션은 일련의 객체로 결과를 넣어하는 것입니다 :

http://www.python.org/doc/2.6/library/sets.html#sets.Set

결과 세트 만에 전달 된 고유 한 값으로 구성됩니다.

실패하면 고유 한 개체 만 포함하는 새 목록을 작성하는 것이 효과적입니다. 뭔가 같은 : for 루프뿐만 아니라 지능형리스트로 응축 될 수

unique_results = [] 
for obj in user: 
    if obj not in unique_results: 
     unique_results.append(obj) 

있다.

0

죄송로를 이 질문을 파고 들지만 GAE에서는 그런 대상을 비교할 수 없다. 나는 우리에게해야한다. 그런 비교를 위해 .KEY을() E :

가주의, 이것은 매우 비효율적이다 :

def unique_result(array): 
    urk={} #unique results with key 
    for c in array: 
     if c.key() not in urwk: 
      urk[str(c.key())]=c 
    return urk.values() 

사람이 더 나은 솔루션이있는 경우, 공유하시기 바랍니다.

+0

Datastore에서이를 수행하는 방법을 묻는 또 다른 질문이 있습니다. 기본적인 대답은 다음과 같습니다. http://stackoverflow.com/questions/1183102/how-to-get-the-distinct-value-of-one -of-my-models-in-google-app-engine을 사용합니다. 비정규 화하는 방법을 모호하게 제안하려고했지만, 그 이후로 예술의 상태가 나아 갔을 가능성이 있습니다. –

5

완성이 질문에 부흥 :

DISTINCT 키워드가 release 1.7.4에 도입되었습니다.

업데이트 된 GQL 참조 (예 : Python) here을 찾을 수 있습니다.