目次

内容

リンク集

モデルの定義

  • モデルとはRDBでいうところのテーブル
  • クラスとして定義する
    class AddressBook( db.Model ):
        name     = db.StringProperty( required=True ),
        phone    = db.PhoneNumberProperty(),
        birthday = db.DateProperty(),

エンティティの登録方法

  • エンティティとはRDBでいうところのレコード
  • いちいちインスタンスを生成しなくても登録できることを発見
    AddressBook(
        name = "Taro Yamada",
        file = "03-XXXX-XXXX",
    ).put()

key_nameについて

  • エンティティの固有名称、エンティティ登録時に指定する。(モデルで定義する必要はない)
    AddressBook(
        name     = "Taro Yamada",
        file     = "03-XXXX-XXXX",
        key_name = "taro-san"
    ).put()
  • key_nameを登録すると、これで検索できるので便利
    data = AddressBook.get_by_key_name( "taro-san" )
  • すでに存在するkey_nameで登録すると、古いエンティティが上書きされる。
  • key_nameは数字で始まることができないらしい 新しい開発環境で修正された

参照型

  • データストアではRDBとは違った形でモデルを連携させる
  • 他のモデルのエンティティをReferenceProperty型で保存する
    class ParentsDataStore( db.Model ):
        last_name = StringProperty()
        first_name = StringProperty()
    
    class ChildrenDataStore( db.Model ):
        last_name = StringProperty()
        parent_ref = ReferenceProperty( reference_class=ParentsDataStore )
    
    class MainPage( webapp.RequestHandler ):
        def get( self ):
            ### 親を指定
            parent_ref = ParentsDataStore(
                last_name = "Yamada",
                first_name = "Taro"
            ).put
            ### 子を指定
            child = ChildrenDataStore(
                first_name = "Hanako",
                parent_ref = parent_ref 
            ).put
  • 後方参照を使えば、親に参照する子を一度に取得できる

日本語を利用する場合

  • 参考
  • スクリプト
    # -*- coding: utf-8 -*-
    
    from google.appengine.ext import db
    from google.appengine.ext import webapp
    from google.appengine.ext.webapp.util import run_wsgi_app
    
    ### アプリのデータ形式
    class Fruits(db.Model):
        name = db.StringProperty()
    
    ### データ登録とページ表示
    class MainPage(webapp.RequestHandler):
        def get(self):
            ### データ登録
            fruit = Fruits()
            fruit.name = u'ばなな'
            fruit.put();
    
            ### 登録内容の表示
            recs = db.GqlQuery("SELECT * FROM Fruits")
            for rec in recs:
                self.response.out.write( rec.name )
    
    ### Webアプリの制御
    application = webapp.WSGIApplication([
        ('/test', MainPage)
    ], debug=True)
    
    def main():
      run_wsgi_app(application)
    
    if __name__ == '__main__':
        main()

使用上の注意

  • datastoreで日付型(DateProperty)を利用する場合、文字列では代入できないみたい
    AddressBook.birthday = datetime.date( 2008, 1, 2 )

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-09-25 (日) 19:27:03 (442d)