【问题标题】:GAE NDB date range query not working as expectedGAE NDB 日期范围查询未按预期工作
【发布时间】:2017-11-10 15:14:49
【问题描述】:

我正在尝试查询某个日期范围内的所有实体。我的理解是,您可以在单个日期时间属性上使用两个不等式过滤器,但这对我不起作用。

我正在尝试查询日期为未来 2-3 天的所有实体。我创建了 5 个实体,1 个在日期范围之前,3 个在,1 个在日期范围之后。创建 5 个实体后,我运行以下命令来测试查询:

# Define the date range
today = datetime.combine(datetime.utcnow(), time(0))
d2 = today + timedelta(days=2)
d3 = today + timedelta(days=3)
print "Start:", d2
print "End:", d3

print "All"
entities = models.Entity.query()
for e in entities:
    print e.my_date

print "Range"
entities = models.Entity.query(Entity.my_date >= d2 and Entity.my_date <= d3)
for e in entities:
    print e.my_date

print "After"
entities = models.Entity.query(Entity.my_date >= d2)
for e in entities:
    print e.my_date

print "Before"
entities = models.Entity.query(Entity.my_date <= d3)
for e in entities:
    print e.my_date

这是上面的结果:

Start: 2017-11-12 00:00:00
End: 2017-11-13 00:00:00
All
2017-11-11 23:00:00
2017-11-12 01:00:00
2017-11-12 06:00:00
2017-11-12 12:00:00
2017-11-13 01:00:00
Range
2017-11-11 23:00:00  # Why is this selected by the query?
2017-11-12 01:00:00
2017-11-12 06:00:00
2017-11-12 12:00:00
After
2017-11-12 01:00:00
2017-11-12 06:00:00
2017-11-12 12:00:00
2017-11-13 01:00:00
Before
2017-11-11 23:00:00
2017-11-12 01:00:00
2017-11-12 06:00:00
2017-11-12 12:00:00

我无法弄清楚为什么日期范围查询包含日期范围之外的实体。

【问题讨论】:

    标签: google-app-engine app-engine-ndb


    【解决方案1】:

    啊,我刚刚想通了...有一个特殊的ndb.AND 用于查询,所以范围查询应该是

    entities = models.Entity.query(ndb.AND(Entity.my_date >= d2, Entity.my_date <= d3))
    

    【讨论】:

    • 我通常对每个条件使用 .filter() 。 models.Entity.query().filter(Entity.my_date &gt;= d2).filter(Entity.my_date &lt;= d3)
    猜你喜欢
    • 2023-03-24
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多