【发布时间】:2012-01-08 13:33:59
【问题描述】:
请帮助我理解为什么 App Engine (Python 2.5, High Replication) 上出现此错误?
回溯(最近一次通话最后): __call__ 中的文件“/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/_webapp25.py”,第 703 行 handler.post(*groups) 文件“/base/data/home/apps/s~apptest/1.354937136776013205/main.py”,第 963 行,在帖子中 get_purchases_for_user(pur.user,pur.car.model) 文件“/base/python_runtime/python_lib/versions/1/google/appengine/ext/db/__init__.py”,第 3592 行,在 __get__ reference_id.to_path()) ReferencePropertyResolveError:ReferenceProperty 无法解析:[u'User',374836L]上下文:该应用程序是关于购买汽车的建议。
什么时候发生:大约每 100 笔交易大约 2 次,所以我真的不知道什么时候也不知道为什么。
其中代码中的对象pur定义为:
allPurchases = models.Purchase.all()
for pur in allPurchases:
car = get_purchases_for_user(pur.user, pur.car.model)
我之前也放了这段代码,我得到了同样的错误,当然是引用这一行
logging.error("Object user: %s, Car Model %s" % {str(pur.user), pur.car.model})
所以,问题不在于 get_purchases_for_user 函数
这些是数据存储区中的模型:
class User(db.Model):
username = db.StringProperty(
required=True)
name = db.StringProperty(
required=True)
email = db.EmailProperty(
required=True)
password = db.StringProperty(
required=True)
class Car(db.Model):
model = db.StringProperty()
name = db.StringProperty()
year = db.DateTimeProperty()
class Purchase(db.Model):
user = db.ReferenceProperty(User,
collection_name='recommendations')
car = db.ReferenceProperty(Car,
collection_name='recommendations')
when = db.DateTimeProperty(
auto_now=True)
【问题讨论】:
-
您确认您确实有一个 ID 为
374836的User实体吗? -
不,我没有。但是应用程序如何调用一个从未存在过的实体
-
我的猜测是它在创建 ReferenceProperty 时就存在,然后在没有考虑参照完整性的情况下被删除。除非你做了一些疯狂的事情,比如以编程方式在 ReferenceProperty 中创建 Key 而不指向实际实体。
-
不可能。该应用程序从不删除用户。我完全确定这一点
-
那么,您确认用户存在了吗?只需 2 分钟,对可能出错的事情的假设数量将减半。
标签: python google-app-engine google-cloud-datastore