古いデータストアでは、キーを使用しました。ここで、ID を使用する必要があります ( NDB Cheat Sheet docから取得):
user = User.get_by_id(user_id)
if user is None:
user = User(id=user_id)
しかし、このコードは機能しないようです - レコードが数回追加されます。
(私の場合、user_idは文字列です)
古いデータストアでは、キーを使用しました。ここで、ID を使用する必要があります ( NDB Cheat Sheet docから取得):
user = User.get_by_id(user_id)
if user is None:
user = User(id=user_id)
しかし、このコードは機能しないようです - レコードが数回追加されます。
(私の場合、user_idは文字列です)
理由がわかりました。上記のコードは正しいのですが、クラスには id プロパティが含まれていました。
class User(ndb.Model):
id = ndb.StringProperty()
そしてそれが問題でした。
トランザクション操作が必要なようです。
user = User.get_or_insert(user_id)
NDB チート シートの「キーの作成」セクションを参照してください。
user = ndb.Key('User', user_id).get()
if user is None:
user = User(id=user_id)
またはこれを試して、うまくいくかどうか教えてください:
user = User.get_by_id(user_id)
if user is None:
user = User(id=user_id)
ところで、たとえ user_id が使用すべき文字列であっても'%s' % user_id