GAE's Python Datastore API


GAE提供了一組Datastore API,可以讓我們將資料存在雲端,這邊一樣以Python為例簡單的紀錄一下。



首先將google.appengine.ext.db import進來。



from google.appengine.ext import db



接著必須設定我們要儲存的Model類別。



宣告繼承自db.model的類別,並在裡面宣告需要的Property (類似資料庫的欄位,Property的型態可參閱類型和 Property 類別這篇)就可以了。



以下面這程式碼片段為例:



class Article(db.Model):
id = db.StringProperty(required=True)
name = db.StringProperty()
content = db.TextProperty()

class Blog(db.Model):
id = db.StringProperty(required=True)
name = db.StringProperty(required=True)
url = db.LinkProperty(required=True)
articleIDs = db.StringListProperty()



這邊筆者建立了一個名為Article的Model,裡面有id、name、以及content這幾個Property。id可用來識別article,為必要的參數,存放的資料為string型態;name是文章的標題,存放的資料一樣是string型態;content則是文章的內文,因為文章的內文可能很長, 所以這邊用text型態 (可超越500字)。



另外一個Model是Blog,裡面有id、name、url、以及articleIDs這幾個Property,id與name跟Article Model的大同小異,url是blog的網址,為必要的參數,存放的資料為link型態;articleIDs是部落格的文章ID清單,存放的資料為string list型態。



Model類別建立好,當我們要儲存資料時只要建立出Model的物件實體,填入對應的資料後呼叫put方法就可以了。




blog = Blog(id=str(uuid.uuid1()), name=”LevelUp”, url=”http://www.dotblogs.com.tw/larrynung“)

articleID = str(uuid.uuid1())
Article(id=articleID, name="hello", content="hello world").put()

blog.articleIDs = [articleID]

blog.put()
...</pre>



資料的取出這邊我們可以透過db.GqlQuery帶入GQL語法 (類似SQL語法,詳細的語法可參閱GQL Reference這篇)去做。




blog = db.GqlQuery(“select * from Blog Limit 1”)[0]



或是直接呼叫Model的gql方法也可以。




blog = Blog.gql(“Limit 1”)[0]



最後這邊實際來看個完整的範例程式:



這範例程式會先嘗試用GQL去讀取Blog資料,若是已經有Blog的資料則將它呈現在畫面上。若是還沒有Blog的資料,則會建立預設的資料並存入,存入後將頁面重新導回做呈現。



所以運行起來應該會像下面這樣:


image



最後一提,在試驗Datastore API時,我們可能會在試驗的同時存了過多不正確的資訊進去,若想每次都是在乾淨的狀況下進行測試,這邊可以開啟Google App Engine Launcher,點擊[Edit/Application Settings…]選單選項。


image



在Application Settings設定對話框中,將Extra Command Ling Flags設為–clear_datastore=yes。


image



Link



  • Python 的資料模型


  • GQL Reference


  • Property 類別


  • 類型和 Property 類別