1

Google App Engine で、データ テーブルの一意のキーを作成したいと考えています。thisで示唆されているように、私は次のことをしようとしています:

Message というモデルがあり、フィールド値が Web ページから次のように取得されるとします。

message = db.Message()
message.name = self.request.get('name')
message.email = self.request.get('email')
...
message.put()
message.messageId = message.key().id()
message.put()

2 つの質問があります。

  1. これは一意の ID (messageId) を作成する正しい方法ですか? つまり、最初にエンティティを配置し、その ID を取得して messageId に割り当て、最後にもう一度配置しますか? 奇妙に見えます。

  2. 同時実行の問題を防ぐ方法は? 次のように「トランザクション」を使用できることを知っています。

    @db.transactional
    def storeEntity():
        message.name = self.request.get('name')
        message.email = self.request.get('email')
        ...
        message.put()
        message.messageId = message.key().id()
        message.put()
    

しかし、このトランザクションが失敗した場合はどうなるでしょうか? 成功するまではどうすればいいですか?前もって感謝します。

4

1 に答える 1

1

キーを指定しない場合、データストアからキーが返されるため、エンティティを 2 回配置する必要はありません。put はキーを返します。

だからあなたはできる :

message_key = Message(name = self.request.get('name'), email : self.request.get('email')).put()
于 2013-01-21T16:49:10.627 に答える