2014-01-21 61 views
1

我是一個NDB用戶與該對象的數據庫是很涼爽。但是如何在部署後直接播種特定的默認值?是否有一些預定義的功能或數據庫播種的標準化方法?如何種子谷歌的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() 

回答

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:

​​

最後一行是至關重要的。它可以保護您的播種腳本免受未經授權的訪問(參見[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

相關問題