edo1z blog

プログラミングなどに関するブログです

google app engine - datastoreのけんきゅう

簡単なけんきゅうです。

class Price(db.Model):
    price = db.IntegerProperty()

このクラスを使います。

now = Price.all()

とやると、 <google.appengine.ext.db.Query object at 0x106845fd0>が返ってきます。これはデータが入っていようが、空だろうがこのような結果が返ってきます。

now = Price.all()
now = now.fetch(1)

とやると、 []が返ってきます。 当然これは、Priceにデータが入ってなかったからです。もしあれば、[<main.Price object at 0x1043a6210>]といったリストが返ってきます。

now = Price.all().fetch(1)
if not now:
    now = Price(price=100)

とやると、<main.Price object at 0x105e88810>が返ってきます。当然これはPriceにデータがなかったので、Priceオブジェクトを作成してnowに代入したからこの結果になってます。もしPriceにデータがあれば、[<main.Price object at 0x103f4aad0>]といったように、リストが返ってきます。

now = Price.all().fetch(1)
if not now: now = Price(price=100)
else: now = now[0]

とやると、Priceにデータがあってもなくても、<main.Price object at 0x106dcff90>といったようなものが返ってきます。

つまり

  • Price.all().fetch(1)とやると、オブジェクトのリストを返します。
  • Price.all().fetch(1)[0]とやれば、オブジェクト自体を取り出せます。(ただし、オブジェクトが無かった場合エラーになります)
  • よってfetch()後のリストが空でないことを確認した上で、オブジェクトを取り出します。