【问题标题】:how to minimize db calls in ndb and optimize python code?如何最小化ndb中的db调用并优化python代码?
【发布时间】:2013-11-25 06:54:13
【问题描述】:

我有一组属性。其中一些属性给出了评论分数。评论保存在 AggregateReview 表中。我必须根据它们的分数对这些属性进行排序。评分最高的房产将排在第一位。当所有有评分的房产将被排序时,我必须附加那些没有被评论的房产。 这是我编写的代码,它工作正常......但我想知道这段代码中有什么可以优化的,我是应用引擎和 ndb 的新手,所以任何帮助将不胜感激。 (我认为对 db 的调用太多了)...

sortedProperties = []
sortedProperties.extend(sorted([eachProperty for eachProperty in properties if AggregateReview.query(AggregateReview.property == eachProperty.key).get()],key=lambda property: AggregateReview.query(AggregateReview.property == property.key).get().rating,reverse=True))
sortedProperties.extend([eachProperty for eachProperty in properties if AggregateReview.query(AggregateReview.property == eachProperty.key).get() is None])
return sortedProperties

经过一番变通后,我想到了这个:

return sorted(properties,key=lambda property: property.review_aggregate.get().average,reverse=True)

但它会引发错误: “NoneType”对象没有“平均”属性

因为它无法找到每个属性的 review_aggregate。我希望它接受 None....

【问题讨论】:

  • 你的代码行太长了™

标签: python google-app-engine app-engine-ndb


【解决方案1】:

老实说,我不确定您的代码中发生了什么,因为行太长了。但我知道您可能想查看Memcached。它可用于最大限度地减少对数据库的命中,并且确实被广泛使用。它实际上是内置在 Google 应用引擎中的。阅读上面的文档here

【讨论】:

    猜你喜欢
    • 2018-01-09
    • 2023-03-19
    • 2013-11-01
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 2019-07-16
    • 2014-01-13
    • 1970-01-01
    相关资源
    最近更新 更多