簡単なけんきゅうです。
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()後のリストが空でないことを確認した上で、オブジェクトを取り出します。