python - Pythonでデータストアを適切にクエリする方法は? -基本的な問題

python google-app-engine google-cloud-datastore

PythonとApp Engineの初心者として、私はもう一度あなたの援助を求めなければなりません。 App Engineの基本的な使い方を学ぶために、しばらくの間「Code in the Cloud」という本を扱ってきました。問題は、今のところあまりうまくいっていないことです。私が抱えていた問題のほとんどはUTF-8エンコード/デコードから生じていましたが、今回はデータストアへのクエリの作成に問題があります。

基本を学ぶために、前述の本の第IV章で利用できる簡単なチャットサービスのコードを再作成しました。主な要素は次のとおりです。

from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
import datetime

from google.appengine.ext import db

#START: ChatMessage
class ChatMessage(db.Model):
    user = db.StringProperty(required=True)
    timestamp = db.DateTimeProperty(auto_now_add=True)
    message = db.TextProperty(required=True)

    def __str__(self):
        return "%s (%s): %s" % (self.user, self.timestamp, self.message)
#END: ChatMessage


上記で、メッセージのデータモデルを定義しました

class ChatRoomPage(webapp.RequestHandler):
    def get(self):
        self.response.headers["Content-Type"] = "text/html"
        self.response.out.write("""
           <html>
             <head>
               <title>AppEngine Chat Room</title>
             </head>
             <body>
               <h1>Welcome to AppEngine Chat Room</h1>
               <p>(Current time is %s)</p>
           """ % (datetime.datetime.now()))
        messages = db.GqlQuery("SELECT * From ChatMessage ORDER BY time")
        for msg in messages:
            self.response.out.write("<p>%s</p>" % msg)
        self.response.out.write("""
           <form action="/talk" method="post"> 
          <div><b>Name:</b> 
           <textarea name="name" rows="1" cols="20"></textarea></div>
           <p><b>Message</b></p>
           <div><textarea name="message" rows="5" cols="60"></textarea></div>
           <div><input type="submit" value="Send ChatMessage"/></div>
           </form>
         </body>
       </html>
       """)
# END: MainPage 


上記のブロックでUIを作成し、投稿したデータに対してGQLクエリを実行します。

最後に:

class ChatRoomPoster(webapp.RequestHandler):
    def post(self):
        chatter = self.request.get("name")
        msgtext = self.request.get("message")
        msg = ChatMessage(user=chatter, message=msgtext)
        msg.put()
        self.redirect('/')        


収集したデータをDatastoreに送信するハンドラーを作成します。

この本を1行ずつ、そしてGoogleチュートリアルと、このWebサイトのいくつかのスレッドを調べても、コードが適切に機能しない理由がわかりません。基本的に、チャットは過去のメッセージを表示しません。プログラムは例外をスローしないので、格納されたデータへのアクセスに何か問題があると思います。識別子などが欠けています。おそらく、私は非常に明白な何かを再び見逃しています。

よろしくお願いします。前もって感謝します。
答え
あなたのクエリは:

    messages = db.GqlQuery("SELECT * From ChatMessage ORDER BY time")


ただし、データストアモデルにはtimeプロパティがなく、timestampプロパティがあります。エンティティにないプロパティで順序付けを試みると、常に空の結果セットが返されます。
関連記事

python - djangoを使用してFacebookのメールを取得する

python - Pythonがサブプロセスと通信する

python - ソラリス上のpython numpy、遅い、またはリンクされていませんか?

python - Google App EngineのSSLError(ローカル開発サーバー)

python - Django:STATIC_URLはappnameをURLに追加します

python - flickAPI:ユーザーアカウントのセットを一覧表示するにはどうすればよいですか?

python - Pythonの他の属性定義内からクラス属性にアクセスする

python - CherryPyでのユーザー管理

python - GStreamerとTheora

python - DjangoカスタムChangeUserForm設定is_active、is_staff、is_superuserをFalseに設定