У меня около 4000 записей, которые мне нужно загрузить в Datastore.
В настоящее время они представлены в формате CSV. Буду признателен, если кто-нибудь укажет мне или объяснит, как массово загружать данные в GAE.
У меня около 4000 записей, которые мне нужно загрузить в Datastore.
В настоящее время они представлены в формате CSV. Буду признателен, если кто-нибудь укажет мне или объяснит, как массово загружать данные в GAE.
Вы можете использовать инструмент bulkloader.py:
Инструмент bulkloader.py, входящий в состав Python SDK, может загружать данные в хранилище данных вашего приложения. После небольшой настройки вы можете создавать новые объекты хранилища данных из файлов CSV.
У меня нет идеального решения, но я предлагаю вам попробовать консоль App Engine. Консоль App Engine - это бесплатный плагин, который позволяет запускать интерактивный интерпретатор Python в производственной среде. Это полезно для разовых манипуляций с данными (например, для импорта исходных данных) по нескольким причинам:
Предлагаю примерно следующее:
csv
для измельчения данных до тех пор, пока у вас не появится список полезных структур данных (скорее всего, список списков или что-то в этом роде)for
loop, iterating through each each data structure in the list:
Вы должны обнаружить, что после одной итерации до №5 вы можете либо копировать и вставлять, либо писать простые функции для ускорения задачи импорта. Кроме того, с получением и обработкой данных на шагах 5.1 и 5.2 вы можете не торопиться, пока не будете уверены, что у вас все получилось идеально.
(Обратите внимание, что в настоящее время консоль App Engine лучше всего работает с Firefox.)
Используя удаленный API и операции с несколькими объектами. Я покажу пример NDB с использованием python, где наш 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.
Взгляните на эту документацию для получения дополнительной информации:
более позднюю версию sdk движка приложений можно загрузить с помощью файла appcfg.py
см. appcfg.py