2015年7月4日

Webapp2 教學 (12) - 使用 Google Datastore ( Using Google datastore with Webapp2 tutorial )

使用 Webapp2 開發 Web 應用程式情況下,應該會遇到 CRUD 的需求。如果你是搭配 GAE 使用的話,基本上都會選擇使用 Datastore,因此本篇將介紹如何使用 Google Datastore。( 其他 Webapp2 相關教學可以參考本篇整理 )



瞭解 Datastore:
Datastore 屬於 NoSQL 儲存機制,它還提供了一個 SQL-like 的查詢語言,稱之為 GQL。其他詳細資料請閱讀官方文件


建立 Model:
首先來建立 Model,這裡指的 Model 是一個 Python Class,其中包含描述 Entity 資料欄位的型態、長度等等。若我們想為書籍建立 Model,它應該會擁有書名、出版商、登錄日期、作者等欄位,參考下面程式碼如何定義書本的 Model:
from google.appengine.ext import db

class Book(db.Model):
    # 書名,字串型態,並且設定為必要欄位
    title = db.StringProperty(required=True)
    # 作者,字串型態
    author = db.StringProperty()
    # 出版商,字串型態
    publisher = db.StringProperty()
    # 建檔日期,DateTime 型態,並設定為資料建立時自動加入當下時間
    create_date = db.DateTimeProperty(auto_now_add=True)

其他更多關於屬性種類及設定可以參考官方文件


儲存資料:
Model 建立好後,我們可以來存取資料,使用方法相當簡單。參考以下程式碼:
# 我自己習慣將 Model 獨立成一個 model.py 檔案,因此程式碼裡有 import model
import model
...
    # 建立 Book 物件,必要欄位必須在建立時就給屬性值
    book = model.Book(title="Dive into Python")
    # 設定屬性值
    book.author = "Mark Pilgrim"
    book.publisher = "Apress"
    # 儲存 ( 此方法包含 Create 跟 Update ),刪除請使用 delete()
    book.put()
成功後可以到 http://your-ip:8000/ 點選 Datastore Viewer 查看你剛剛新增的 Book 資料。


取得資料:
取得資料的方式有很多種,以下列出幾個基本的使用方式:
import model
from google.appengine.ext import db
...
    # 方法一
    books = db.GqlQuery("SELECT * FROM Book WHERE author = :1", param)
    for book in books:
        print book.title

    # 方法二
    books = model.Book.gql("WHERE author = :1", param)
    for book in books:
        print book.title

    # 方法三
    books = db.Query(model.Book).filter("author = ", param)
    for book in books:
        print book.title

以上為幾個基本查詢資料的方式,還有未列出來的部分請參考官方文件。


Environment :
  ・ Arch Linux
  ・ Python 2.7

Reference :
  ・ Webapp2 official site
  ・ The Python DB Datastore API


熱門文章