【问题标题】:How can I query objects with a date field, using a specific month and year?如何使用特定的月份和年份查询具有日期字段的对象?
【发布时间】:2010-01-22 12:07:48
【问题描述】:

我需要对一组具有日期字段的对象进行 gql 查询。我对 python 和 GAE 都很陌生,所以我对此有点无知。我正在查看文档,但找不到我正在寻找的东西。基本上我做了以下类方法

Event.getEventsForMonth(cls, month,year):

所以我试图查询日期字段的月份和年份在指定范围内的对象。我试图创建一个日期对象并将其用于比较,但到目前为止我还没有感到高兴。

dateto = str(year)+str(month+1)+"01"
datefrom = str(year)+str(month)+"01"
if month + 1 == 13:
    dateto = str(year+1)+"01"+"01"

query = GqlQuery("SELECT * FROM Event WHERE date >= :datefrom AND date <= :dateto", dateto=dateto, datefrom=datefrom)
return query

这种方法对我来说看起来很糟糕,因为我不太了解可以从 Python 内联 GQL 查询使用的核心方法。

感谢任何帮助

干杯,

安德鲁

【问题讨论】:

    标签: python django google-app-engine


    【解决方案1】:

    首先,将您的日期作为 DateProperty 或 DateTimeProperty 实例存储在数据存储中。

    然后,您可以像这样进行查询:

    def getEventsForMonth(self, month, year):
      start_date = datetime.datetime(year, month, 1)
      if month == 12:
        end_date = datetime.datetime(year + 1, 1, 1)
      else:
        end_date = datetime.datetime(year, month + 1, 1)
      return Events.all().filter('date >=', start_date).filter('date <=', end_date).fetch(1000)
    

    【讨论】:

    • timedelta 不接受几个月的参数,我认为它只会持续几天!为实施 +1,但谢谢。
    • 如果我找不到更多答案来展示如何添加月份,我会尽快回答! :-)
    • 怎么样:如果月份 == 12:end_date = datetime.datetime(month=1, year=year+1) - datetime.timedelta(days=1) else: end_date = datetime.datetime(月=月+1,年=年) - datetime.timedelta(days=1)
    猜你喜欢
    • 2013-09-25
    • 1970-01-01
    • 2021-03-23
    • 2013-02-15
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    相关资源
    最近更新 更多