1

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

3 回答 3

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

于 2014-01-21T15:50:01.167 回答
2

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

于 2014-05-02T17:09:48.370 回答
0

我想我明白你在问什么。

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

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

于 2014-01-21T13:11:53.380 回答