инициализировать хранилище данных GAE начальными данными?

это мой первый вопрос о stackoverflow, и я новичок в программировании:

Как правильно загружать данные в хранилище данных GAE при развертывании моего приложения? Это должно произойти только один раз при развертывании.

Другими словами: как я могу вызывать методы в своем коде, чтобы эти методы вызывались только при развертывании моего приложения?

В документации GAE для python2.7 сказано, что нельзя вызывать основную функцию, поэтому я не могу этого сделать:

if __name__ == '__main__':
   initialize_datastore()
   main()

person fhchl    schedule 29.07.2013    source источник
comment
вы можете просто проверить, существуют ли данные, а если нет, запустить сценарии запуска   -  person Gwyn Howell    schedule 29.07.2013
comment
Да, не делай этого. На самом деле, если у вас вообще есть код if name == 'main' внизу скрипта обработчика, удалите его.   -  person Tombatron    schedule 29.07.2013


Ответы (1)


Создайте обработчик, доступный только администраторам. Когда этот обработчик вызывается с помощью простого запроса GET, вы можете проверить, существуют ли исходные данные, и, если нет, вставить их.

Настройка обработчика для запроса входа в систему или статуса администратора.

Другой вариант — написать скрипт Python, использующий Remote API. Это позволит вам получить доступ к локальным источникам данных, таким как CSV-файл или локально размещенная база данных, и вам не потребуется создавать потенциально громоздкий обработчик.

Читайте об удаленном API в документации.

Использование оболочки удаленного API — Google App Engine

person Tombatron    schedule 29.07.2013
comment
Спасибо за ответ! Это звучит как не очень элегантный обходной путь. Это такая особая проблема? Должен быть легкий путь или нет? - person fhchl; 29.07.2013
comment
То, что предлагает @Timbatron, элегантно и правильно. Если у вас есть много данных для создания, вы можете рассмотреть возможность запуска их в очереди задач (у которой есть 10-минутный крайний срок вместо 1) - person Gwyn Howell; 29.07.2013
comment
А как насчет удаленного API? Полностью отключился от этой опции, пока я отвечал сначала. - person Tombatron; 29.07.2013
comment
Спасибо за ответ. Я поиграю с обоими вариантами, а потом решу, что лучше для меня. - person fhchl; 30.07.2013