【问题标题】:fetch data from ndb query by KeyProperty field通过 KeyProperty 字段从 ndb 查询中获取数据
【发布时间】:2020-01-07 06:08:07
【问题描述】:

我有用户模型,另一个模型是用户令牌

 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')

当我尝试获取令牌时,它会返回 None

 print( Token.get_by_user(data.key) )

这是返回 None 如何在用户 keyProrperty 的帮助下从令牌中获取数据?

【问题讨论】:

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


    【解决方案1】:

    我认为您可能正在寻找祖先查询,根据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() 将是对代码的一个很好的更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-01
      • 2019-05-22
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      • 2015-04-14
      相关资源
      最近更新 更多