Python AppEngine:模型不是不变的

Python AppEngine:模型不是不变的,python,google-app-engine,Python,Google App Engine,我正在尝试将模型的实例插入ndb数据库 它不断地给我“模型不是不变的”错误 我尝试了不同的型号名称,但仍然是相同的错误 class User(ndb.Model): username = ndb.StringProperty() email = ndb.StringProperty() lwr_username = ndb.ComputedProperty(lambda self: self.username.lower()) lwr_email = ndb.Co

我正在尝试将模型的实例插入ndb数据库

它不断地给我“模型不是不变的”错误

我尝试了不同的型号名称,但仍然是相同的错误

class User(ndb.Model):
    username = ndb.StringProperty()
    email = ndb.StringProperty()
    lwr_username = ndb.ComputedProperty(lambda self: self.username.lower())
    lwr_email = ndb.ComputedProperty(lambda self: self.email.lower())
这是我的插入代码:

entity = User()
entity.email = ""
entity.username = "bob"

logging.info(entity)

#Commit data asynchronously
entities = [entity]
futures = ndb.put_multi_async(entities)

#Build Response whilst database is committing
response = {

}

#Wait for commits to finish
ndb.Future.wait_all(entities)
这是完整的堆栈跟踪

Model is not immutable
Traceback (most recent call last):
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1511, in __call__
    rv = self.handle_exception(request, response, e)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1505, in __call__
    rv = self.router.dispatch(request, response)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1253, in default_dispatcher
    return route.handler_adapter(request, response)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1077, in __call__
    return handler.dispatch()
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 547, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 545, in dispatch
    return method(*args, **kwargs)
  File "/base/data/home/apps/s~myapp-api/1.377037445874907069/v1/handler/userHandler.py", line 11, in post
    responseCode, response = UserService.create(locale, json.loads(self.request.body), **kwargs)
  File "/base/data/home/apps/s~myapp-api/1.377037445874907069/v1/service/userService.py", line 37, in create
    ndb.Future.wait_all(entities)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 345, in wait_all
    waiting_on = set(futures)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/model.py", line 3017, in __hash__
    raise TypeError('Model is not immutable')
TypeError: Model is not immutable

您需要使用
期货
列表,而不是
实体
来等待异步过程完成:

ndb.Future.wait_all(futures)

wait\u all()
函数将这些内容存储在
set()
对象中,而set要求内容可以散列。由于可变对象不能存储在集合或字典中,谷歌工程师在
模型中添加了一个显式的
TypeError
。\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu!我错了!