1

Предположим, я следующую базу данных GQL,Подсчет количества различных строк данных с помощью GQL запроса в Python

class Signatories(db.Model): 
    name = db.StringProperty() 
    event = db.StringProperty() 

Эта база данных содержит информацию о событиях, которые люди подписались на. Скажем, у меня есть следующие записи в базе данных в формате (event_name, event_desc): (Bob, TestEvent), (Bob, TestEvent2), (Fred, TestEvent), (John, TestEvent). Но дилемма заключается в том, что я не могу просто объединить все события Боба в одну сущность, потому что я хотел бы запросить для всех людей, подписавшихся на конкретное событие, а также я хотел бы добавить такие записи без необходимости вручную обновлять запись каждый раз.

Как я могу подсчитать количество различных строк, заданных GQL Query в Python (в моем примере я специально пытаюсь увидеть, сколько людей в настоящее время зарегистрировано для событий)?

Я попытался использовать старый mcount = db.GqlQuery("SELECT name FROM Signatories").count(), однако это, конечно, возвращает общее количество строк в списке, независимо от уникальности каждой строки.

Я также пробовал использовать count = len(member), где member = db.GqlQuery("SELECT name FROM Signatories"), но, к сожалению, это только возвращает ошибку.

ответ

1

Вы не можете - по крайней мере, не напрямую. (Кстати, у вас нет базы данных GQL).

Если у вас есть небольшое количество элементов, а затем принести их в память, и использовать операцию набора для получения уникального набора, а затем рассчитывать

Если у вас есть большее число лиц, которые делают в фильтрации памяти и подсчете проблематично, тогда ваша стратегия будет заключаться в суммировании счета при их создании,

eg

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

Однако, поскольку вы получаете большое количество этих объектов, вам нужно будет начать выполнять дополнительную работу, чтобы подсчитать их, поскольку единственный query.count() станет слишком дорогостоящим. Затем вам нужно начать поиск стратегий подсчета с использованием хранилища данных.

+0

О, я использовал неправильный пример аварии, так что, возможно, я вас обманываю. Я не смог бы сделать эти агрегированные списки (или я мог бы?). Можно ли было бы конвертировать то, что запрос выливает в список, а затем использовать len() с этим (или это невозможно)? В любом случае, спасибо за вашу помощь. – Diafotismos

+0

Уверен, что вы можете сделать запрос проекта и вернуть только два интересующих вас поля. Затем используйте понимание списка, чтобы преобразовать результирующий набор в набор кортежей, а затем вы получите набор уникальных значений, которые вы можете использовать len () on. –

+0

'len (set (i.name для i в db.GqlQuery (" SELECT name FROM Signatories ")))' –

 Смежные вопросы

  • Нет связанных вопросов^_^