Python 如何基于密钥将筛选器应用于google数据存储集合?

Python 如何基于密钥将筛选器应用于google数据存储集合?,python,google-app-engine,google-cloud-datastore,gql,Python,Google App Engine,Google Cloud Datastore,Gql,我正在尝试使用基于键参数的filter()方法。例如: user_id="agxkZXZ-emFiZXRhLTJyCgsSBFVzZXIYGAw" d=datamodel.Task.all() d.filter("user=",user_id) results=d.fetch(1024) 这将产生零结果,这可能是因为键的格式不正确。如果这里是gql,我必须使用Key()函数,如下所示: db.gqlQuery("select * from Task where user=Key(:1)",u

我正在尝试使用基于键参数的filter()方法。例如:

user_id="agxkZXZ-emFiZXRhLTJyCgsSBFVzZXIYGAw"
d=datamodel.Task.all()
d.filter("user=",user_id) 
results=d.fetch(1024)
这将产生零结果,这可能是因为键的格式不正确。如果这里是gql,我必须使用Key()函数,如下所示:

db.gqlQuery("select * from Task where user=Key(:1)",user_id)

但是我不认为我可以在过滤器中使用Key()函数,但是必须有一些python函数等价物。。。有没有一种方法可以正确格式化要在filter()方法中使用的键?

您确实可以在过滤器中使用
key
实例

from google.appengine.api.datastore_types import Key

user_id="agxkZXZ-emFiZXRhLTJyCgsSBFVzZXIYGAw"
datamodel.Task.all().filter('user', Key(user_id))

您确实可以在过滤器中使用
实例

from google.appengine.api.datastore_types import Key

user_id="agxkZXZ-emFiZXRhLTJyCgsSBFVzZXIYGAw"
datamodel.Task.all().filter('user', Key(user_id))

嗯,谢谢,但不要掷骰子。该函数返回相同的base64字符串。
Key(user\u id)
根据
user\u id
中的字符串编码键值返回
Key
对象。如果您获取该对象的
str
表示,它会将其转换回编码字符串。但是它应该可以在过滤器中使用。这假设您有
Task
类型的实体,其
user
属性是与给定键等效的
Key
值。您能确认以这种方式存储属性值吗?您确定使用了正确的
键吗?
Key(user\u id)
的返回值应该是类
Key
的实例,而不是字符串。我的答案假设一个模型,其中
user=db.ReferenceProperty(user)
(它将
作为其值)@tdavis,实际上它是一个db.ReferenceProperty(None),但看起来我必须将其设置为db.StringProperty(),才能工作。另外,除非你把
@rook
放进去,否则我不会收到你的回复。嗯,谢谢,但不要掷骰子。该函数返回相同的base64字符串。
Key(user\u id)
根据
user\u id
中的字符串编码键值返回
Key
对象。如果您获取该对象的
str
表示,它会将其转换回编码字符串。但是它应该可以在过滤器中使用。这假设您有
Task
类型的实体,其
user
属性是与给定键等效的
Key
值。您能确认以这种方式存储属性值吗?您确定使用了正确的
键吗?
Key(user\u id)
的返回值应该是类
Key
的实例,而不是字符串。我的答案假设一个模型,其中
user=db.ReferenceProperty(user)
(它将
作为其值)@tdavis,实际上它是一个db.ReferenceProperty(None),但看起来我必须将其设置为db.StringProperty(),才能工作。另外,除非你把
@rook
,否则我不会收到你的回复。