我想先提一下我是python的新手,以及GAE的python平台。当我试图使用其密钥ID获取实体时,我一直在发现这个非常奇怪的错误/错误... 这就是我的工作,
我正在查询数据存储区实体模型UserDetails,以获取与从UI中检索的用户名对应的密钥。
src_key_str = db.GqlQuery('SELECT __key__ FROM UserDetails WHERE user_name = :uname', uname = src_username).fetch(1)
for itr1 in src_key_str:
src_key = itr1.id_or_name()
然后使用获得的src_key
我尝试获得与之相对应的实体。
accounts = UserDetails.get_by_id(src_key)
现在,当我尝试使用self.response.out.write(accounts.user_name)
访问帐户的属性时,我收到错误AttributeError: 'list' object has no attribute 'user_name'
。考虑到帐户实际上是一个列表,我尝试使用accounts[0]
获取第一个元素现在我得到list out of bound error
。
当我尝试对src_key值进行硬编码时,它工作得很好但是,当我将值传递给相同的方法时,我得到了这些错误。我无法理解为什么GAE在生产环境和开发环境中表现如此。我错过了有关此行为的一些信息吗?
编辑:添加堆栈跟踪,
Traceback (most recent call last):
File "/base/python_lib/versions/1/google/appengine/ext/webapp/__init__.py", line 507, in __call__
handler.get(*groups)
File "/base/data/home/apps/bulkloader160by2/1-5.337673425692960489/new_main.py", line 93, in get
self.response.out.write(accounts.user_name)
AttributeError: 'list' object has no attribute 'user_name'
答案 0 :(得分:1)
您收到此错误的原因是“帐户”是列表而不是单个实例。根据您的代码,我不明白为什么会出现这种情况,但请尝试执行以下操作:
src_key = db.GqlQuery('SELECT __key__ FROM UserDetails WHERE user_name = :uname', uname = src_username).get()
if src_key:
account = UserDetails.get(src_key)
当你只需要一个对象时,没有理由调用.fetch(),也没有理由提取id,只是将它传递给.get_by_id。事实上,如果你所展示的片段就是你所做的一切,那么更简单,更快捷的是:
account = db.GqlQuery('SELECT * FROM UserDetails WHERE user_name = :uname', uname = src_username).get()