google app engine 7 ( datastore )

เห็นเขาว่าเหมือน Django’s data modelling API แต่ว่า scalable กว่า

ก่อนอื่นต้อง import module db มาก่อน

from google.appengine.ext import db

จากนั้นประกาศโมเดล ลองเขียนหลายๆชนิดดังนี้

class Greeting(db.Model) :

author = db.UserProperty()                                # User
content = db.StringProperty(multiline=True)  # String ( multiline (optional) : this property can contain newline characters )

text = db.TextProperty() # long String
date = db.DateTimeProperty(auto_now_add=True) # DateTime ( auto_now_add=True : ใส่ค่า default เป็น now ถ้าไม่ได้กำหนดค่าให้มัน )

ดูชนิดได้ ตามนี้

อื่นๆ ดูได้จาก datastore reference

Create/Update

สมมติว่ามีหน้าฟอร์มโพสมาที่หน้านี้แล้ว

class Guestbook(webapp.RequestHandler):
def post(self):
greeting = Greeting()

if users.get_current_user():
greeting.author = users.get_current_user()
greeting.content = self.request.get('content')
greeting<strong>.put()</strong> #  saves our new object to the datastore ถ้ามีอยู่แล้วจะ update มัน
self.redirect('/')

หรือจะเล่นแบบนี้เลยก็ได้ ง่ายดี

greeting = Greeting(author = users.get_current_user(), content = self.request.get('content'))

greeting.put()

select

greetings = Greeting.all()

จะ order หรือ where ก็ได้

greetings = Greeting.all()
greetings.filter("author =", users.get_current_user())

greetings.order("-date")

greetings_query.fetch(10)

หรือจะเอามายำๆอยู่บรรทัดเดียวกันก็ได้

greetings_query = Greeting.all().order('-date')
greetings = greetings_query.fetch(10)

จากนั้น

{% for greeting in greetings %}

{{ greeting.key.id }}  # คีย์ของแต่ละเรคอร์ด

{{ greeting.author }}
{{ greeting.content }}
{% endfor %}

count ได้ด้วยนะ

greetings.count()

greetings[0]

เรายังสามารถ get_by_id ได้ด้วย Greeting.get_by_id(greeting_id)

นอกจากนี้เรายังสามารถเขียน query ไปตรงๆ โดยใช้ gql ก็ได้

if users.get_current_user():
greetings = Greeting.gql("WHERE author = <strong>:1</strong> ORDER BY date DESC LIMIT 20",
users.get_current_user())

หรือ

greetings = Greeting.gql("WHERE author = <strong>:author</strong> ORDER BY date DESC",
author=users.get_current_user())

NOTE :

– สามารถจัดการ data ที่เก็บไว้แล้วได้จาก http://localhost:8080/_ah/admin/datastore

( Entity Kind คือ ชื่อ Object )

ซึ่งมี interactive console ไว้ให้เล่นด้วย เด็ดจริงๆ

ถ้าจะเล่นกับ Model ในนั้น ต้อง import มันเข้ามาก่อน

from main import Greeting

– ถ้าต้องการ Clear Development Server Datastore

ตอน start server

$ dev_appserver.py --clear_datastore helloworld/

– ปกติมันจะสร้าง datastore ไว้ใน temp ในเครื่องของเรา ถ้าไม่อยากให้มันหายไปตอนเรารีสตาร์ท ให้กำหนด

--datastore_path=Folder ตอน dev_appserver

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s