使用ndb tasklets获取get_multi_async

时间:2014-02-03 10:33:03

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

我有两个ndb类 - 用户和图像。

class User(ndb.Model):
    created_at = data.UTCDateTimeProperty(auto_now_add=True)
    updated_at = data.UTCDateTimeProperty(auto_now_add=True, auto_now=True, indexed=False)

    age = ndb.IntegerProperty()

    name = ndb.StringProperty()

    is_verified = ndb.BooleanProperty(default=False)
    completed_at = data.UTCDateTimeProperty(indexed=False)



class Image(ndb.Model):
    created_at = data.UTCDateTimeProperty(auto_now_add=True)
    updated_at = data.UTCDateTimeProperty(auto_now_add=True, auto_now=True, indexed=False)

    file = ndb.KeyProperty(indexed=False)
    user = ndb.KeyProperty()

    filename = ndb.StringProperty()
    image_url = ndb.StringProperty(indexed=False)

Image表中可能有多个用户图像。我必须得到每个用户的前3个图像。我想在一次通话中获取所有记录。我必须使用ndb tasklet执行此操作。我是ndb的新手,所以任何帮助都会受到赞赏....

1 个答案:

答案 0 :(得分:1)

你的问题有点模糊。你都尝试了些什么?您还没有描述如何将图像与用户相关联。

我将假设您正在创建Image实体,其中User实例作为密钥中的父实体。

e.g。

 img = Image(parent=some_user.key)

现在我们可以为用户检索图像了。虽然你没有定义前3个图像的构成,但我会根据最近的3个图像来假设它。

 images = Image.query(ancestor=some_user.key).order(Image.updated_at).fetch(3)

这为我们提供了3个图像实体。

现在我们遇到了一些问题。您正在存储文件名和图像URL。如果要将图像存储在其他位置,为什么要保留文件名?确实如此,或者您实际上是计划将图像存储在数据存储区或GCS中,如果这两个选项中的任何一个都是这种情况,那么您需要适当地更改图像类。如果您只是将URL存储到某个远程图像资源,那么我看不出任何使用tasklet的理由,实际上根本不确定是否有任何理由在此刻使用tasklet。

因此,要继续推进解决方案,您需要包括存储/提供图像的方式以及从何处。然后我们可以进一步阐述解决方案。