如何使用Python正确查询数据存储基本问题

如何使用Python正确查询数据存储基本问题,python,google-app-engine,google-cloud-datastore,Python,Google App Engine,Google Cloud Datastore,作为Python和应用程序引擎的初学者,我不得不再次请求您的帮助。一段时间以来,我一直在阅读《云中的代码》一书,学习使用AppEngine的基本知识。问题是到目前为止我还不是很成功。虽然我遇到的大多数问题都源于UTF-8编码/解码,但这次我在查询数据存储时遇到了问题 为了学习基础知识,我重新创建了上述书第四章中提供的一个简单聊天服务的代码。关键要素包括: from google.appengine.ext import webapp from google.appengine.ext.webap

作为Python和应用程序引擎的初学者,我不得不再次请求您的帮助。一段时间以来,我一直在阅读《云中的代码》一书,学习使用AppEngine的基本知识。问题是到目前为止我还不是很成功。虽然我遇到的大多数问题都源于UTF-8编码/解码,但这次我在查询数据存储时遇到了问题

为了学习基础知识,我重新创建了上述书第四章中提供的一个简单聊天服务的代码。关键要素包括:

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 
我创建处理程序将收集的数据发送到数据存储中

在逐行查阅了这本书、谷歌教程以及这个网站上的一些帖子之后,我仍然不明白为什么代码不能正常工作。基本上,聊天不会显示过去的消息。我猜我在访问存储的数据时出错了,因为程序没有抛出任何异常-我缺少一个标识符或类似的东西。也许我又错过了一件非常明显的事情


我非常感谢你的帮助。提前感谢。

在消息的for循环中,“msg”是一个数据存储对象。您需要引用特定的属性(即msg.message)

对于消息中的消息:
self.response.out.write(“%s

%msg.message”)
您的查询是:

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

但是您的数据存储模型没有
time
属性,它有
timestamp
属性。尝试按不在任何实体上的属性排序将始终返回空结果集。

您的标题不提供任何有用信息。显然,你的问题是“如何查询数据存储?”之类的。请确保你的问题是(a)显而易见的,(b)用你的标题概括的。请更新您的问题以使其更清晰。此外,请搜索:这些问题都是相关的。其中一个(或多个)可能已经回答了您的问题。@S Lott。按照你的建议,我更正了标题。我已经浏览过类似问题的帖子。尽管如此,我还是看不出我做错了什么。同样,问题可能很简单(可能是),但如果没有一些指导,我想我不会想出解决办法。@Mathias:搜索是指导。你不是第一个问这个问题的人。“浏览线程”听起来好像你还没有读过100个相关问题中的任何一个。我(再次)建议你仔细阅读前一百个问题。您在其他问题中看到的代码越多,您就会理解得越多。只参考
msg
是很好的,因为
ChatMessage
类有
\uu str\uu
方法,其结果在这里似乎是预期的。
for msg in messages:
    self.response.out.write("<p>%s</p>" % msg.message)
    messages = db.GqlQuery("SELECT * From ChatMessage ORDER BY time")