通过 KeyProperty 字段从 ndb 查询中获取数据
fetch data from ndb query by KeyProperty field
我有用户模型,另一个模型是用户令牌
class User(EndpointsModel):
name = ndb.StringProperty()
@classmethod
def get_by_name(cls,name)
return cls.query(cls.name == name).get()
2 模型是用户令牌
class Token(EndpointsModel):
user = ndb.KeyProperty()
token = ndb.StringProperty()
@classmethod
def get_by_user(cls, key):
return cls.query(cls.token == key).get()
现在我从用户那里获取数据
data = User.get_by_name('jaskaran')
当我尝试获取令牌时 return 我 None
print( Token.get_by_user(data.key) )
这是 return None 我如何在用户 keyProrperty 的帮助下从令牌中获取数据?
我认为您可能正在寻找祖先查询,根据 official documentation,看起来像这样:
如文档中的示例所示:
purchases = Purchase.query(
Purchase.customer == customer_entity.key).fetch()
这适用于您的用例将类似于:
class Token(EndpointsModel):
user = ndb.KeyProperty(kind=User) #added kind User in key property, just in case
token = ndb.StringProperty()
@classmethod
def get_by_user(cls, key):
return cls.query(cls.token == key).fetch()
###Fetching data
data = User.get_by_name('jaskaran')
##HERE WILL BE GOOD TO PRINT DATA.KEY, FOR EXAMPLE,
##TO MAKE SURE THAT YOU ARE ACTUALLY RETRIEVING SOMETHING
print(data.key)
print(Token.get_by_user(data.key)
作为旁注,docs 也解释了 Account.get_by_id(...) is faster than Account.query(...).get()
,因此删除 .get() 将是对代码的一个很好的更新。
我有用户模型,另一个模型是用户令牌
class User(EndpointsModel):
name = ndb.StringProperty()
@classmethod
def get_by_name(cls,name)
return cls.query(cls.name == name).get()
2 模型是用户令牌
class Token(EndpointsModel):
user = ndb.KeyProperty()
token = ndb.StringProperty()
@classmethod
def get_by_user(cls, key):
return cls.query(cls.token == key).get()
现在我从用户那里获取数据
data = User.get_by_name('jaskaran')
当我尝试获取令牌时 return 我 None
print( Token.get_by_user(data.key) )
这是 return None 我如何在用户 keyProrperty 的帮助下从令牌中获取数据?
我认为您可能正在寻找祖先查询,根据 official documentation,看起来像这样:
如文档中的示例所示:
purchases = Purchase.query(
Purchase.customer == customer_entity.key).fetch()
这适用于您的用例将类似于:
class Token(EndpointsModel):
user = ndb.KeyProperty(kind=User) #added kind User in key property, just in case
token = ndb.StringProperty()
@classmethod
def get_by_user(cls, key):
return cls.query(cls.token == key).fetch()
###Fetching data
data = User.get_by_name('jaskaran')
##HERE WILL BE GOOD TO PRINT DATA.KEY, FOR EXAMPLE,
##TO MAKE SURE THAT YOU ARE ACTUALLY RETRIEVING SOMETHING
print(data.key)
print(Token.get_by_user(data.key)
作为旁注,docs 也解释了 Account.get_by_id(...) is faster than Account.query(...).get()
,因此删除 .get() 将是对代码的一个很好的更新。