如何在实体中使用谷歌用户ID - python appengine

时间:2011-11-14 10:02:36

标签: python google-app-engine jinja2

我创建了一个像这样的实体:

company = dbDatafile(usOwner = user)
company.name = self.request.get("name")
company.put()

其中user是Google用户帐户。现在,当我尝试搜索该用户时:

datafiles = dbDatafile.gql("WHERE usOwner = '%s'" % user.user_id())

分配给jinja2模板var:

template_values = {
    'datafiles': datafiles
}

并输出到html:

{% for datafile in datafiles %}
    >>>{{ datafile.name }}         chevrons to indicate any looping
{% endfor %}

我没有输出。

数据存在于管理信息中心,但我无法访问它。有什么想法吗?

由于

2 个答案:

答案 0 :(得分:5)

如果usOwner是UserProperty,则需要在GQL中使用USER()

datafiles = dbDatafile.gql("WHERE usOwner = USER(:1)", user.email())

还记得总是使用占位符,而不是字符串插值 - 只是因为它不是SQL,并不意味着它不易受到注入。

答案 1 :(得分:0)

好的,这不是严格回答我的问题,而是一个轻微的解决方法。我决定使用父功能,所以我的代码现在看起来像这样:

company = dbDatafile(parent=db.Key.from_path('user', user.user_id()))
company.name = self.request.get("name")
company.usOwner = user
company.put()


datafiles = dbDatafile.gql("WHERE ancestor IS '%s'" % db.Key.from_path('user', user.user_id()))

不确定这是否理想,但它可以正常工作并与High Replication数据存储区兼容。