Google App Engine データストアの使用 野望(1.3)

datastore01 

  • App Engine は、Python 用の データ モデリング API を備えている
  • Django のデータ モデリング API と似ているが、App Engine の拡張可能なデータストを背後で使用
  • import 文を最初の行に追加(1)
  • プロパティの種別はデータストアAPIリファレンス参照(2)
  • 新しいオブジェクトをデータストアに保存(3)
  • 保存されたオブジェクトをGQLで取り出す(4)
  • クラスのgqlメソッドでもデータを取得できる。(SELECT * FROM Person を省略できる
    • persons = Person.gql("ORDER BY id LIMIT 10")
  • WHERE句に定数は指定できない。パラメータを位置、名前で指定できる。
    • persons = Person.gql("WHERE id = :1 ORDER BY id",  int("1"))
    • persons = Person.gql("WHERE id = :id ORDER BY id",  id=int("2"))
import cgi 
import wsgiref.handlers 
from google.appengine.api import users 
from google.appengine.ext import webapp 
from google.appengine.ext import db  #(1) 
# 保存するモデルクラス 
class Person(db.Model): 
    id = db.IntegerProperty() #(2) 
    name = db.StringProperty() 
    mail = db.EmailProperty() 
class MainPage(webapp.RequestHandler): 
    def get(self): 
        self.response.out.write('<html><body>') 
        # (4) 保存されたデータを GQL で取り出す 
        persons = db.GqlQuery("SELECT * FROM Person ORDER BY id LIMIT 10") 
        self.response.out.write("<form action='/add' method='post'>")            
        self.response.out.write("""<table border='1'> 
            <tr> 
                <th>id</th><th>name</th><th>mail</th> 
            </tr> 
        """) 
        for person in persons: 
            self.response.out.write("<tr>") 
            self.response.out.write("<td>%d</td>" %person.id) 
            self.response.out.write("<td>%s</td>" %cgi.escape(person.name)) 
            self.response.out.write("<td>%s</td>" %cgi.escape(person.mail)) 
            self.response.out.write("</tr>") 
        self.response.out.write(""" 
            <tr> 
                <td><input type='text' size='2'  name='id'></td> 
                <td><input type='text' size='10' name='name'></td> 
                <td><input type='text' size='15' name='mail'> 
                    <input type='submit' value='add'></td> 
            </tr> 
            </table> 
        """) 
        self.response.out.write("</form>") 
        self.response.out.write('</body></html>') 
# データ投入処理        
class AddPersonPage(webapp.RequestHandler): 
    def post(self): 
        person = Person() 
        id = self.request.get('id') 
        if id != '': 
            person.id  = int(id) 
            person.name = self.request.get('name') 
            person.mail = self.request.get('mail') 
            person.put() # (3)データ保存 
        self.redirect('/') 
def main(): 
    application = webapp.WSGIApplication( 
                                         [('/', MainPage), 
                                          ('/add', AddPersonPage)], 
                                          debug=True 
                                         ) 
    wsgiref.handlers.CGIHandler().run(application) 
if __name__ == "__main__": 
    main() 

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です