GAE在不使用CSV的情况下加载数据到datastore
我之前用过bulkloader.Loader这个工具,把数据批量加载到GAE的开发和实际数据库里。接下来我想做的是,从不是CSV格式的数据中创建对象,然后把它们放进数据库。
假设我的对象长得像这样:
class CainEvent(db.Model):
name =db.StringProperty(required=True)
birthdate = db.DateProperty()
有没有人能给我一个简单的例子,教我怎么做呢?
2 个回答
0
你可能会觉得这篇文章很有用——它详细讲解了如何直接从关系型数据库(RDBMS)加载数据,不过同样的方法也适用于从其他任何来源加载数据。
2
这里有一个非常简单的例子,说明我们是如何使用批量加载器来加载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"
]
}
]
这个格式其实是简化过的。
基本上,你只需要创建一个批量加载器的子类,并实现一个叫做 generate_records
的方法,至少要让这个方法返回字符串的列表。用同样的方法,你也可以从XML文件、ROT13加密文件或者其他任何格式的数据中加载数据。
需要注意的是,generate_records
方法返回的字符串列表,必须和你在初始化加载器时提供的“属性”列表在长度和顺序上匹配(也就是说,在 AlbumLoader.__init__
方法中,第二个参数的内容要一致,具体可以参考这个例子)。
这种方法其实提供了很大的灵活性:我们在 JSONLoader
的实现中重写了 __init__
方法,自动确定我们正在加载的模型的 kind
以及它的属性列表,以便提供给 bulkloader.Loader
的父类。