我需要将大约4000条记录上传到Datastore。
它们目前是CSV格式。如果有人愿意,我会很感激 请指出或解释如何将数据批量上传到GAE。
答案 0 :(得分:6)
您可以使用bulkloader.py工具:
随附的bulkloader.py工具 Python SDK可以将数据上传到您的 应用程序的数据存储区。只有一个 一点点的设置,你可以创建 CSV文件中的新数据存储实体。
答案 1 :(得分:3)
我没有完美的解决方案,但我建议您使用App Engine Console。 App Engine Console是一个免费插件,可让您在生产环境中运行交互式Python解释器。由于以下几个原因,它对一次性数据操作(例如初始数据导入)很有帮助:
我建议如下:
csv
模块来截断您的数据,直到您有一个有用的数据结构列表(很可能是列表或类似的列表)for
循环,遍历列表中的每个数据结构:
您应该会发现经过#5的一次迭代后,您可以复制和粘贴,或者编写简单的函数来加速导入任务。此外,通过在步骤5.1和5.2中获取和处理数据,您可以花时间直到确定自己完美无缺。
(注意,App Engine Console目前最适合Firefox。)
答案 2 :(得分:2)
通过在多个实体上使用远程API和操作。我将使用python在NDB上展示一个示例,其中我们的Test.csv包含以分号分隔的以下值:
1;2;3;4
5;6;7;8
首先我们需要导入模块:
import csv
from TestData import TestData
from google.appengine.ext import ndb
from google.appengine.ext.remote_api import remote_api_stub
然后我们需要创建远程api存根:
remote_api_stub.ConfigureRemoteApi(None, '/_ah/remote_api', auth_func, 'your-app-id.appspot.com')
有关使用远程api的更多信息,请查看this answer。
然后是主代码,基本上做了以下事情:
主要代码:
# Open csv file for reading.
with open('Test.csv', 'rb') as file:
# Set delimiter.
reader = csv.reader(file, delimiter=';')
# Reduce 2D list into 1D list and then map every element into entity.
test_data_list = map(lambda number: TestData(number=int(number)),
reduce(lambda list, row: list+row, reader)
)
# Or you can use list comprehension.
test_data_list = [TestData(number=int(number)) for row in reader for number in row]
# Batch put whole list into HRD.
ndb.put_multi(test_data_list)
put_multi操作还负责确保在单个HTTP POST请求中批处理适当数量的实体。
有关详细信息,请查看此文档:
答案 3 :(得分:0)
app引擎sdk的更高版本,可以使用appcfg.py
上传请参阅appcfg.py