Python中日期相等的GQL查询

Python中日期相等的GQL查询,python,google-app-engine,Python,Google App Engine,好吧,上次你们很快就帮了我的忙,所以我要回到井里;) 免责声明:我是python新手,对AppEngine也很陌生。我试图做的是对AppEngine教程中的示例进行简单修改 我已将日期值存储在内存类中: class Memory(db.Model): author = db.UserProperty() content = db.StringProperty(multiline=True) date = db.DateProperty(auto_now_add=True)

好吧,上次你们很快就帮了我的忙,所以我要回到井里;)

免责声明:我是python新手,对AppEngine也很陌生。我试图做的是对AppEngine教程中的示例进行简单修改

我已将日期值存储在内存类中:

class Memory(db.Model):
    author = db.UserProperty()
    content = db.StringProperty(multiline=True)
    date = db.DateProperty(auto_now_add=True)
现在我希望能够查找特定日期的记录。我不确定具体怎么做,所以我尝试了一些方法,包括:

memories = db.GqlQuery("SELECT * from Memory where date = '2007-07-20')
and
memories = Memory.all()
memories.filter("date=", datetime.strptime(self.request.get('date'), '%Y-%m-%d').date())
and
memories = Memory.all()
memories.filter("date=", self.request.get('date'))
但每次我运行它,我都会感到恐惧。坦白地说,我甚至不知道如何解析应用程序失败时收到的这些错误消息,但我很高兴能够查找特定日期的内存记录

编辑:下面是完整的源代码

import cgi
import time

from datetime import datetime
from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext import db

class Memory(db.Model):
    author = db.UserProperty()
    content = db.StringProperty(multiline=True)
    date = db.DateProperty()

class MainPage(webapp.RequestHandler):
    def get(self):
        self.response.out.write('<html><body>')

        memories = db.GqlQuery('SELECT * from Memory ORDER BY date DESC LIMIT 10')

        for memory in memories:
            self.response.out.write('<b>%s</b> wrote: ' % memory.author.nickname())
            self.response.out.write('<em>%s</em>' % memory.date)
            self.response.out.write('<blockquote>%s</blockquote>' % cgi.escape(memory.content))

        self.response.out.write("""
<div style="float: left;">
<form action="/post" method="post">
    <fieldset>
    <legend>Record</legend>
    <div><label>Memory:</label><input type="text" name="content" /></textarea></div>
    <div><label>Date:</label><input type="text" name="date" /></div>
    <div><input type="submit" value="Record memory" /></div>
    </fieldset>
</form>
</div>
<div style="float: left;">
<form action="/lookup" method="post">
    <fieldset>
    <legend>Lookup</legend>
    <div><label>Date:</label><input type="text" name="date" /></div>
    <div><input type="submit" value="Lookup memory" /></div>
    </fieldset>
</form>
</div>""")

        self.response.out.write('</body></html>')

class PostMemory(webapp.RequestHandler):
    def post(self):
        memory = Memory()

        if users.get_current_user():
            memory.author = users.get_current_user()

        memory.content = self.request.get('content')
        memory.date = datetime.strptime(self.request.get('date'), '%Y-%m-%d').date()

        memory.put()
        self.redirect('/')

class LookupMemory(webapp.RequestHandler):
    def post(self):
        memories = db.GqlQuery("SELECT * FROM Memory WHERE date = '2009-07-21'")

        for memory in memories:
            self.response.out.write('<b>%s</b> wrote: ' % memory.author.nickname())
            self.response.out.write('<em>%s</em>' % memory.date)
            self.response.out.write('<blockquote>%s</blockquote>' % cgi.escape(memory.content))     

application = webapp.WSGIApplication([('/', MainPage), ('/post', PostMemory), ('/lookup', LookupMemory)], debug=True)

def main():
    run_wsgi_app(application)

if __name__ == '__main__':
    main()
导入cgi
导入时间
从日期时间导入日期时间
从google.appengine.api导入用户
从google.appengine.ext导入webapp
从google.appengine.ext.webapp.util导入运行\u wsgi\u应用程序
从google.appengine.ext导入数据库
类内存(db.Model):
author=db.UserProperty()
content=db.StringProperty(multiline=True)
date=db.DateProperty()
类主页(webapp.RequestHandler):
def get(自我):
self.response.out.write(“”)
memories=db.GqlQuery('按日期从内存顺序中选择*描述限制10')
记忆中的记忆:
self.response.out.write('%s write:'%memory.author.昵称())
self.response.out.write(“%s”%memory.date)
self.response.out.write(“%s”%cgi.escape(memory.content))
self.response.out.write(“”)
记录
内存:
日期:
查找
日期:
""")
self.response.out.write(“”)
类PostMemory(webapp.RequestHandler):
def post(自我):
内存=内存()
if users.get_current_user():
memory.author=users.get_current_user()
memory.content=self.request.get('content')
memory.date=datetime.strtime(self.request.get('date'),“%Y-%m-%d”).date()
memory.put()
self.redirect(“/”)
类LookupMemory(webapp.RequestHandler):
def post(自我):
memories=db.GqlQuery(“从内存中选择*日期='2009-07-21'”)
记忆中的记忆:
self.response.out.write('%s write:'%memory.author.昵称())
self.response.out.write(“%s”%memory.date)
self.response.out.write(“%s”%cgi.escape(memory.content))
application=webapp.WSGIApplication([('/',主页),('/post',PostMemory),('/lookup',LookupMemory)],debug=True)
def main():
运行应用程序(应用程序)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
参考

参考

我认为要么是内存的导入错误,要么是datetime的导入错误

如果内存位于另一个.py文件中,例如otherpyfile.py,则需要从otherpyfile导入内存
,然后以这种方式使用它

如果是日期时间问题,则需要导入日期时间。您的第一个答案的引号不匹配,排序不正确。我对中间的一个进行了排序,这样如果您导入datetime

memories = db.GqlQuery("SELECT * from Memory where date = '2007-07-20'")

memories = Memory.all().filter("date=", datetime.datetime.strptime(self.request.get('date'), '%Y-%m-%d').date())

memories = Memory.all().filter("date=", self.request.get('date'))
appengine错误屏幕并不总是有用的,因此请查看命令提示符中抛出的日志。如果你看到这个错误,可能值得放弃它所做的短堆栈跟踪,这样我可以尝试进一步帮助你

我认为要么是内存的导入错误,要么是datetime的导入错误

如果内存位于另一个.py文件中,例如otherpyfile.py,则需要从otherpyfile导入内存
,然后以这种方式使用它

如果是日期时间问题,则需要导入日期时间。您的第一个答案的引号不匹配,排序不正确。我对中间的一个进行了排序,这样如果您导入datetime

memories = db.GqlQuery("SELECT * from Memory where date = '2007-07-20'")

memories = Memory.all().filter("date=", datetime.datetime.strptime(self.request.get('date'), '%Y-%m-%d').date())

memories = Memory.all().filter("date=", self.request.get('date'))

appengine错误屏幕并不总是有用的,因此请查看命令提示符中抛出的日志。如果您看到该错误,可能值得转储短堆栈跟踪,这样我可以尝试进一步帮助您。

您正在尝试对非GQL查询对象使用GQL语法。你的选择是:

  • 使用查询对象并传入datetime.date对象:
    q=Memory.all().filter(“date=,datetime.date.today())
  • 使用GqlQuery并使用日期语法:
    q=db.GqlQuery(“从内存中选择*其中日期=日期(2007,07,20)”)
  • 使用GqlQuery并传入datetime.date对象:
    q=db.GqlQuery(“从date=:1的内存中选择*,datetime.date.today())

  • 您正在尝试对非GQL查询对象使用GQL语法。你的选择是:

  • 使用查询对象并传入datetime.date对象:
    q=Memory.all().filter(“date=,datetime.date.today())
  • 使用GqlQuery并使用日期语法:
    q=db.GqlQuery(“从内存中选择*其中日期=日期(2007,07,20)”)
  • 使用GqlQuery并传入datetime.date对象:
    q=db.GqlQuery(“从date=:1的内存中选择*,datetime.date.today())

  • 我试过了,但仍然会出错。如果我去掉日期过滤器行,一切都会正常运行。但是谢谢你提供了GQL参考的链接。我正在寻找与如何比较日期类型相关的内容,但没有成功。我想我没有太努力;)我会在这段时间内处理它。我试过了,但仍然会出错。如果我去掉日期过滤器行,一切都会正常运行。但是谢谢你提供了GQL参考的链接。我正在寻找与如何比较日期类型相关的内容,但没有成功。我想我没有太努力;)谢谢,这让我更接近了(我想!)我不确定以前运行时是否有引号错误,但现在,我没有收到硬编码日期为“2007-07-20”的任何错误,但是我没有得到任何结果,即使我知道数据存储中有带有该日期的条目。我已经修改了这本书
    memories = db.GqlQuery("SELECT * from Memory where date = '2007-07-20'")
    
    memories = Memory.all().filter("date=", datetime.datetime.strptime(self.request.get('date'), '%Y-%m-%d').date())
    
    memories = Memory.all().filter("date=", self.request.get('date'))