2014-01-21 2 views
1

Я пользователь NDB, и эта база данных объектов довольно крутая. Но как я могу засеять определенные значения по умолчанию непосредственно после развертывания? Существуют ли определенные предопределенные функциональные возможности или стандартизованный способ для посева базы данных?Как разбить NDB Google (хранилище движка приложения)

В качестве примера:

У меня есть следующие ndb.Model и хочу какое-то «существующего родитель по умолчанию».

Category(ndb.Model): 
    name = ndb.StringProperty(required=True) 
    parent = ndb.KeyProperty(kind='Category',required=True, 
        default=<KeyOfRootCategory>) 

Куда поместить следующие значения посева?

main_category = Category(name="all", parent=None) #this is the root category 
main_category.put() 

ответ

2

Не похоже, там посвящены 'после развертывания' крючки для этого. Я просто поместил некоторый код в сценарий главного обработчика (тот, который содержит «webapp2.WSGIApplication (...)»), проверяя, существует ли уже существующая корневая категория, и создайте ее, если нет. В качестве альтернативы это может быть частью действия обработчика.

0

Я думаю, что понимаю, что вы просите.

Вы можете создать родительский ключ без необходимости создания объекта. Это определит вашу группу лиц.

В качестве альтернативы ему не нужен родительский элемент, но он будет родителем любого дочернего элемента. Любой объект с родителем, определенным в ключе, становится корнем его собственной группы сущностей, и эта группа сущностей может иметь 1 или более членов (то есть себя и всех детей).

2

Почему бы не создать простой обработчик посева для вызова после развертывания (например,/посев/пример)? То, как я его вижу, нужно только посеять, так что нет необходимости в каком-то крюке.

seed.py:

class ExampleHandler(webapp2.RequestHandler): 

    def get(self): 

     # Do your thing 
     # Maybe use "get_or_insert()". See [1] 

     return 

app = webapp2.WSGIApplication(
    [ 
     ('/example', ExampleHandler), 
    ], 
    debug=True 

) 

Затем в app.yaml:

- url: /seeding/.* 
    script: seed.app 
    login: admin 

Последняя строка имеет решающее значение. Он защищает ваш сценарий посева от несанкционированного доступа (см. [2]).

[1] https://developers.google.com/appengine/docs/python/ndb/modelclass#Model_get_or_insert

[2] https://developers.google.com/appengine/docs/python/config/appconfig#Python_app_yaml_Requiring_login_or_administrator_status

Смежные вопросы