谷歌应用引擎中的奇怪错误

时间:2009-11-11 10:01:40

标签: python google-app-engine

我想先提一下我是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'

1 个答案:

答案 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()