I have about 4000 records that I need to upload to Datastore.
They are currently in CSV format. I'd appreciate if someone would point me to or explain how to upload data in bulk to GAE.
I have about 4000 records that I need to upload to Datastore.
They are currently in CSV format. I'd appreciate if someone would point me to or explain how to upload data in bulk to GAE.
您可以使用bulkloader.py工具:
Python SDK 附带的 bulkloader.py 工具可以将数据上传到应用程序的数据存储区。只需进行一点设置,您就可以从 CSV 文件创建新的数据存储实体。
我没有完美的解决方案,但我建议您使用App Engine Console。App Engine Console 是一个免费插件,可让您在生产环境中运行交互式 Python 解释器。由于以下几个原因,它有助于一次性数据操作(例如初始数据导入):
我建议如下:
csv
模块来分割你的数据,直到你有一个有用的数据结构列表(很可能是一个列表列表或类似的东西)for
循环,遍历列表中的每个数据结构:
您应该会发现,在通过#5 的一次迭代之后,您可以复制和粘贴,或者编写简单的函数来加快您的导入任务。此外,通过在步骤 5.1 和 5.2 中获取和处理您的数据,您可以慢慢来,直到您确定自己拥有完美的数据。
(注意,App Engine 控制台目前最适合 Firefox。)
通过对多个实体使用远程 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 的更多信息,请查看此答案。
然后是主要代码,它基本上做了以下事情:
主要代码:
# 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 请求中批处理适当数量的实体。
查看此文档以获取更多信息:
后期版本的app engine sdk,可以使用appcfg.py上传