【发布时间】:2010-10-19 00:02:43
【问题描述】:
我有大约 4000 条记录需要上传到 Datastore。
它们目前为 CSV 格式。如果有人愿意,我将不胜感激 指点我或解释如何将数据批量上传到 GAE。
【问题讨论】:
标签: google-app-engine upload bulk google-cloud-datastore
我有大约 4000 条记录需要上传到 Datastore。
它们目前为 CSV 格式。如果有人愿意,我将不胜感激 指点我或解释如何将数据批量上传到 GAE。
【问题讨论】:
标签: google-app-engine upload bulk google-cloud-datastore
通过对多个实体使用远程 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 请求中批处理适当数量的实体。
查看此文档了解更多信息:
【讨论】:
以后版本的app engine sdk,可以使用appcfg.py上传
【讨论】:
我没有完美的解决方案,但我建议您使用App Engine Console。 App Engine Console 是一个免费插件,可让您在生产环境中运行交互式 Python 解释器。它有助于一次性数据操作(例如初始数据导入),原因如下:
我建议如下:
csv 模块来分割数据,直到获得有用的数据结构列表(很可能是列表列表或类似的东西)for循环,遍历列表中的每个数据结构:
您应该会发现,在通过 #5 的一次迭代之后,您可以复制和粘贴,或者编写简单的函数来加快您的导入任务。此外,通过在步骤 5.1 和 5.2 中获取和处理您的数据,您可以慢慢来,直到您确定自己拥有完美的数据。
(注意,App Engine 控制台目前最适合 Firefox。)
【讨论】:
您可以使用bulkloader.py 工具:
bulkloader.py 工具包含在 Python SDK 可以将数据上传到您的 应用程序的数据存储。只需一个 一点点设置,你可以创建 来自 CSV 文件的新数据存储实体。
【讨论】: