Python 如何基于密钥将筛选器应用于google数据存储集合?
我正在尝试使用基于键参数的filter()方法。例如: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
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
,否则我不会收到你的回复。