Как да заредите NDB на Google (съхранение на машина за приложения)

Аз съм потребител на NDB и тази обектна база данни е доста готина. Но как мога да заредя конкретни стойности по подразбиране директно след внедряването? Има ли някаква предварително дефинирана функционалност или стандартизиран начин за зареждане на база данни?

Като пример:

Имам следния 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()

person NaN    schedule 21.01.2014    source източник


Отговори (3)


Не изглежда, че има специални куки за „след внедряване“ за това. Просто бих поставил някакъв код в скрипта на основния манипулатор (този, който съдържа „webapp2.WSGIApplication(...)“), като проверява дали основната категория вече съществува и я създава, ако не. Като алтернатива това може да е част от някакво действие на манипулатора.

person joerx    schedule 02.05.2014

Защо не създадете прост начален манипулатор, който да се извиква след внедряване (напр. /seeding/example)? Начинът, по който аз го виждам, трябва да поставите само веднъж, така че няма нужда от някаква кука.

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

person Matthias Eisen    schedule 21.01.2014

Мисля, че разбирам какво питаш.

Можете да създадете родителски ключ, без да се налага да създавате обекта. Това ще дефинира вашата група обекти.

Като алтернатива не се нуждае от родител, но ще бъде родител на всяко дете. Всеки обект без родител, дефиниран в ключа, става корен на собствената си група обекти и тази група обекти може да има 1 или повече членове (т.е. себе си и всички деца.)

person Tim Hoffman    schedule 21.01.2014