Python GAE NDB如何获取用户数据并放回数据库
我最近在Google App Engine上从ext.db切换到NDB.model,对数据库总体来说还是相当陌生的。下面是新的NDB代码,它与ext.db基本相同 我想做的是,当用户尝试登录时,检查uid是否存在。如果是,则将数据库中的数据作为“条目”传回。如果uid不存在,则从Json中提取数据并填充新的“条目” 此代码不起作用。我已经尝试了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
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