2013-08-30 91 views
2

我正在使用Google-Appengine-NDB。我试图从数据库中获取不同的值,但它不起作用。获取不同值的最佳方法

 
Now my code is: 
    query_set = cls.query().order(cls.ls) # Getting ordered queries. 
    set_of_field = set([data.field for data in query_set]) # And using this loop for differ.`

但循环花费的时间太长(超过12秒)。 请帮助我,我该如何加速,或者如何从ndb中获得不同的值?

+1

返回并按照答案尝试'distinct' - 您确定您拥有当前的SDK。我只是尝试不同的 - 'x = models.Product.query(projection = [“product_type”],distinct = True)',它的工作原理与广告一样。 –

+1

适用于最新的SDK 1.9.28.388。一个注意事项:只有在投影/ distinct是作为query()的一部分给出而不是作为查询对象的提取的一部分时才有效。一个问:在一个模型与可能的模糊之间进行权衡,并对不同的值进行上述查询与维护两个模型之间的权衡是什么?其中一个模型总是只包含不同的值? –

回答

2

尝试不同的查询, 如果你的领域建立索引您可以使用此: https://developers.google.com/appengine/docs/python/ndb/queries#projection

query_set = cls.query(projection=["field"], distinct=True) 
set_of_field = [data.field for data in query_set] 

但是,如果你有一个巨大的名单,你可以做到这一点的任务队列,并在一些地方保存结果或只是在另一个模型中保留一个独特的数据

+0

是的,已经试过了。但有错误:'TypeError:__init __()有一个意外的关键字参数'distinct'。所以现在我使用taskqueue,谢谢你的回答。 – Bulgantamir