GAE在不使用CSV的情况下将数据加载到数据存储区中

时间:2009-09-14 15:29:13

标签: python google-app-engine

我已经使用bulkloader.Loader将内容加载到GAE开发和实时数据存储中,但我接下来要从非CSV数据创建对象并将其推送到数据存储区。

所以说我的对象是这样的:

class CainEvent(db.Model):   
    name =db.StringProperty(required=True)  
    birthdate = db.DateProperty()

有人能给我一个如何做到这一点的简单例子吗?

2 个答案:

答案 0 :(得分:2)

以下是我们使用bulkloader加载JSON数据而不是CSV数据的极其简化示例:

class JSONLoader(bulkloader.Loader):
    def generate_records(self, filename):
        for item in json.load(open(filename)):
            yield item['fields']

在这个例子中,我假设JSON格式看起来像

[
    {
        "fields": [
            "a", 
            "b", 
            "c", 
            "d"
        ]
    }, 
    {
        "fields": [
            "e", 
            "f", 
            "g", 
            "h"
        ]
    }
]

过于简单了。

基本上,您所要做的就是创建bulkloader.Loader的子类并实现(至少)generate_records方法,这将产生字符串列表。这种策略适用于从XML文件或ROT13加密文件或其他任何内容加载数据。

请注意,generate_records方法产生的字符串列表必须与初始化加载器时提供的“属性”列表(长度和顺序)匹配(即{{}的第二个参数1}} this example}中的方法。

这种方法实际上提供了很大的灵活性:我们在AlbumLoader.__init__实现上覆盖__init__方法并自动确定我们正在加载的模型的JSONLoader及其列表要提供给kind父类的属性。

答案 1 :(得分:0)

您可能会发现this post很有用 - 它详细说明了如何直接从RDBMS加载数据,但同样适用于从任何其他来源加载数据。