使用远程APi从app引擎导出数据时出现属性错误

时间:2014-07-01 09:23:00

标签: google-app-engine google-cloud-datastore

使用app引擎中的示例代码会给出属性错误。更奇怪的是, 当batch_size为100时,第一次提取将给出错误,而如果设置为10,则第二次提取将给出错误,当batch_size为1时,第25次提取将给出错误。是由于远程API的问题吗?

Python版本:2.7

App引擎sdk版本:1.9.6

query = MyModel.all()
entities = query.fetch(100)
while entities:
    for entity in entities:
        # Do something with entity
    query.with_cursor(query.cursor())
    entities = query.fetch(100)

错误消息:

Traceback (most recent call last):
  File "migrate.py", line 77, in <module>
    entities = query.fetch(batch_size)
  File "/home/kamel/Library/google_appengine/google/appengine/ext/db/__init__.py", line 2157, in fetch
    return list(self.run(limit=limit, offset=offset, **kwargs))
  File "/home/kamel/Library/google_appengine/google/appengine/ext/db/__init__.py", line 2326, in next
    return self.__model_class.from_entity(self.__iterator.next())
  File "/home/kamel/Library/google_appengine/google/appengine/ext/db/__init__.py", line 1435, in from_entity
    entity_values = cls._load_entity_values(entity)
  File "/home/kamel/Library/google_appengine/google/appengine/ext/db/__init__.py", line 1413, in _load_entity_values
    value = prop.make_value_from_datastore(value)
  File "/home/kamel/labola/src/model/properties.py", line 295, in make_value_from_datastore
    return pickle.loads(value)
  File "/usr/lib/python2.7/pickle.py", line 1382, in loads
    return Unpickler(file).load()
  File "/usr/lib/python2.7/pickle.py", line 858, in load
    dispatch[key](self)
  File "/usr/lib/python2.7/pickle.py", line 1083, in load_newobj
    obj = cls.__new__(cls, *args)
AttributeError: class Reference has no attribute '__new__

1 个答案:

答案 0 :(得分:0)

我在python2下尝试取消python3 pickles时遇到了同样的问题。问题与新式类在python3中成为默认值有关。 (source

我的解决方案是将class AClass:替换为class AClass(object):