Запросы с уникальным набором результатов JDOQL - PullRequest
0 голосов
/ 09 декабря 2010

В моем приложении GAE я хочу создать JDOQL, который возвращает список, в котором каждый элемент существует не более одного раза, даже в базе данных их больше. Как я могу это сделать?

1 Ответ

0 голосов
/ 10 декабря 2010

Я не знаю о JDOQL, но если вам нужен список, в котором каждая сущность существует максимально раз, т.е. каждый элемент списка уникален, то вы можете сделать следующее:

Предположим, у вас есть соответствующий класс типа / модели, который мы называем Type, с атрибутами att1, attr2. Вы хотите иметь список уникальных элементов на основе одного или нескольких атрибутов, скажем, attr2.

Вы можете использовать следующий метод, который я адаптировал из хорошего источника по этому вопросу:

def unique(seq, idfun=None):  
        ''' A function that returns a list of unique items in a very efficient manner  
        Refer to : http://www.peterbe.com/plog/uniqifiers-benchmark ''' 
        # order preserving 
        if idfun is None: 
                def idfun(x): return x 
        seen = {} 
        result = [] 
        for item in seq: 
                marker = idfun(item) 
                # in old Python versions: 
                # if seen.has_key(marker) 
                # but in new ones: 
                if marker in seen: continue 
                seen[marker] = 1 
                result.append(item) 
        return result 

чтобы получить список уникальных элементов из типа хранилища данных Тип, основанный на attr2, я мог бы сделать что-то вроде:

list = Type.all()

unique_list = unique(list,lambda t: t.attr2)

Надеюсь, это поможет, потому что это был лучший метод для меня до сих пор.

...