【问题标题】:How to seed google's NDB (app engine storage)如何播种谷歌的 NDB(应用引擎存储)
【发布时间】:2014-01-21 12:21:04
【问题描述】:

我是 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()

【问题讨论】:

    标签: google-app-engine model app-engine-ndb seeding


    【解决方案1】:

    看起来没有专门的“部署后”挂钩。我只是将一些代码放入主处理程序脚本(包含'webapp2.WSGIApplication(...)'的那个)中,检查根类别是否已经存在,如果不存在则创建它。或者,这可能是某些处理程序操作的一部分。

    【讨论】:

      【解决方案2】:

      为什么不创建一个简单的种子处理程序以在部署后调用(例如 /seeding/example)?在我看来,你只需要播种一次,所以不需要某种钩子。

      种子.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

      【讨论】:

        【解决方案3】:

        我想我明白你在问什么。

        您可以创建父键而无需创建实体。这将定义您的实体组。

        或者,它不需要父母,但可以是任何孩子的父母。任何没有在键中定义父级的实体都将成为它自己的实体组的根,并且该实体组可以有 1 个或多个成员(即它自己和任何子级)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-30
          • 1970-01-01
          • 2013-02-26
          相关资源
          最近更新 更多