Python GAE NDB如何获取用户数据并放回数据库

Python GAE NDB如何获取用户数据并放回数据库,python,google-app-engine,database-design,app-engine-ndb,Python,Google App Engine,Database Design,App Engine Ndb,我最近在Google App Engine上从ext.db切换到NDB.model,对数据库总体来说还是相当陌生的。下面是新的NDB代码,它与ext.db基本相同 我想做的是,当用户尝试登录时,检查uid是否存在。如果是,则将数据库中的数据作为“条目”传回。如果uid不存在,则从Json中提取数据并填充新的“条目” 此代码不起作用。我已经尝试了entry=User.query().filter(Profile.uid==info['uid')。获取但是我得到了一个属性错误 AttributeEr

我最近在Google App Engine上从ext.db切换到NDB.model,对数据库总体来说还是相当陌生的。下面是新的NDB代码,它与ext.db基本相同

我想做的是,当用户尝试登录时,检查uid是否存在。如果是,则将数据库中的数据作为“条目”传回。如果uid不存在,则从Json中提取数据并填充新的“条目”

此代码不起作用。我已经尝试了
entry=User.query().filter(Profile.uid==info['uid')。获取
但是我得到了一个属性错误

AttributeError:“instancemethod”对象没有“last\u modified”属性

很抱歉,我无法澄清更多,但我被卡住了。我错过了什么?ext.db的一切都很好(注意我在上面的代码中所做的更改),但是我看不出NDB有什么问题。我也在寻求改进,因此请提出修改建议


非常感谢您的帮助!谢谢。

这条线是你的问题

entry = User.query().filter(Profile.uid == info['uid']).get  
您没有调用该方法,只是将其分配给条目

@ndb.transactional
def my_get_or_insert(cls, id, **kwds):
  entry = cls.query().filter(Profile.uid == info['uid']).get  
  if not entry:
    entry = cls(**kwds)
  entry.last_modified = datetime.now()
  entry.put()
  return (entry, True)  # True meaning "created"
事务性-避免脏数据库操作

kwrds =  {'uid': info["id"], 
                     'firstName' : info["firstName"], 
                     'lastName' : info["lastName"], .....

}

如果是你,我将使用:

entry = User.query(Profile.uid == info['uid']).get()
而不是:

entry = User.query().filter(Profile.uid == info['uid']).get

您可以直接在查询声明中指定过滤器,并用逗号分隔。不要忘了结尾的括号,否则会生成函数指针。

感谢您指出问题所在。我正在努力理解它。与ext.db一起工作的
entry=User.all().filter('uid=',info['uid']).get()
,与
entry=User.query().filter(Profile.uid==info['uid']).get
NDB之间的区别是什么?在这两种情况下,行都应该是get()。您只是忘记了brakets,所以您没有在代码中调用get(),您只是将方法分配给
条目
,因此出现了错误
AttributeError:“instancemethod”对象没有属性“last_modified”
在这种情况下,实例方法是get。当然instancemethod get没有属性lastmodified\
entry = User.query().filter(Profile.uid == info['uid']).get