我正在尝试使用bulkuploader将一些数据上传到我的App Engine数据存储区。对于我的一个实体类型,我有一个属性是从另一个实体计算出来的,所以我真的很想对每个实体进行一些后处理,因为它是为了进行这种计算而导入的。我一直看到post_import_function变换标签的简要提及,但没有真正全面的文档或示例。
现在,我只是想做一个简单的测试,让我的post_import_function工作。
我的实体模型:
class TestEntity(db.Model):
location = db.GeoPtProperty()
cells = db.StringListProperty() # Computed from location
我的bulkloader.yaml文件的相关部分如下所示:
- kind: TestEntity
[... connector info ...]
property_map:
[... transform info for __key__ and location here ...]
post_import_function: post_transform.post_process_testentity
我的post_process_testentity函数:
def post_process_testentity(input_dict, entity_instance, bulkload_state):
entity_instance.cells = [u'Hello there!']
return entity_instance
当我使用所有这些东西进行数据上传时,我没有错误(我知道正在输入post_process_testentity,因为我在其中添加了一些正确运行的打印语句)。关于上传的一切都有效,除了我的后期处理功能完全没有效果。当我使用数据查看器时,我的数据存储区中没有“Hello there!”。
有人可以帮我一点吗?谢谢!
答案 0 :(得分:1)
如果其他人遇到类似问题,我可以按照上述方法进行测试。似乎后处理函数中的entity_instance
实际上是google.appengine.api.datastore.Entity
类型,它是dict
的子类。因此,对post_process_testentity函数的这种修改起作用了:
def post_process_testentity(input_dict, entity_instance, bulkload_state):
entity_instance['cells'] = [u'Hello there!']
return entity_instance
但是,我只是通过打印各种调试信息来解决这个问题。如果在某处记录这些东西会很棒。有谁知道我在哪里可以找到这样的文件?