【问题标题】:Counting the number of distinct strings given by a GQL Query in Python计算 Python 中 GQL 查询给出的不同字符串的数量
【发布时间】:2016-02-13 00:05:27
【问题描述】:

假设我有以下 GQL 数据库,

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

此数据库包含有关人们已注册的活动的信息。假设我在数据库中有以下格式的条目(event_name,event_desc):(Bob,TestEvent),(Bob,TestEvent2),(Fred,TestEvent),(John,TestEvent)。 但这里的困境是我不能将 Bob 的所有事件汇总到一个实体中,因为我想查询所有注册特定事件的人,而且我想添加此类条目而无需手动更新每次进入。

我如何计算 Python 中 GQL 查询给出的不同字符串的数量(在我的示例中,我特别想查看当前有多少人注册了活动)?

我尝试过使用旧的mcount = db.GqlQuery("SELECT name FROM Signatories").count(),但是这当然会返回列表中的字符串总数,而不管每个字符串的唯一性如何。

我也尝试过使用count = len(member),其中member = db.GqlQuery("SELECT name FROM Signatories"),但不幸的是,这只会返回错误。

【问题讨论】:

    标签: python google-app-engine google-cloud-datastore gql gqlquery


    【解决方案1】:

    你不能——至少不能直接。 (顺便说一句,你没有 GQL 数据库)。

    如果你有少量的item,那么将它们取到内存中,并使用集合操作产生唯一集合然后计数

    如果您有大量实体在内存过滤和计数中产生问题,那么您的策略将是在创建它们时聚合计数,

    例如

    每次创建以字符串对作为键的事件时创建一个单独的实体。这样,您将只有一个实体作为代表特定对的数据存储。然后你可以直接数数。

    但是,当您获得大量这些实体时,您将需要开始执行一些额外的工作来计算它们,因为单个 query.count() 将变得过于昂贵。然后,您需要开始研究使用数据存储的计数策略。

    【讨论】:

    • 哦,我不小心用错了例子,所以我可能误导了你。我将无法制作这些汇总列表(或者我可以吗?)。是否可以将查询吐出的内容转换为列表,然后使用 len() (或者这是不可能的)?无论如何,感谢您的帮助。
    • 当然可以,做一个项目查询,只返回你感兴趣的两个字段。然后使用列表推导将结果集转成元组集合,然后你就会有一组唯一的您可以使用 len() 的值。
    • len(set(i.name for i in db.GqlQuery("SELECT name FROM Signatories")))
    • 我以为你的意思是不同的字符串对。
    • 但是这种简单的方法无法扩展,然后您仍然需要考虑您需要计数的准确度,然后查看不同的性能计数策略。
    猜你喜欢
    • 2012-06-25
    • 2014-08-23
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多