如何使用peewee查询日期范围?
How to query dates range using peewee?
我有 SQLite 数据库,其中的表包含日期。我想要 ot select 个属于特定范围的记录,但我无法编写正确的查询。
# This query returns nothing
rows = model.select().where(
(model.date.between(start_date, end_date)) &
(model.name == point_name)
).tuples()
# This query returns nothing too
rows = model.select().where(
(model.date > start_date) &
(model.date < end_date) &
(model.name == point_name)
).tuples()
# However tis one works:
rows = model.select().where(
(model.date > start_date) &
(model.name == point_name)
).tuples()
为什么我的代码在查询比给定的日期更小或更小的日期时有效,而当我尝试查询日期范围时却失败了?
您如何将日期存储在数据库中?这是一个预先存在的数据库,还是您使用 Peewee 插入所有记录?我问是因为 SQLite 可以将日期表示为字符串或数字(时间戳)。如果您使用的是字符串,那么日期必须按字典顺序排序才能进行有意义的比较……这就是 Peewee 使用 YYYY-mm-dd 的原因。
如果你的日期排序正确,那么如果你想要包含端点,你应该可以使用 .between()
。否则你可以做 (date_field > low) & (date_field < high)
我有 SQLite 数据库,其中的表包含日期。我想要 ot select 个属于特定范围的记录,但我无法编写正确的查询。
# This query returns nothing
rows = model.select().where(
(model.date.between(start_date, end_date)) &
(model.name == point_name)
).tuples()
# This query returns nothing too
rows = model.select().where(
(model.date > start_date) &
(model.date < end_date) &
(model.name == point_name)
).tuples()
# However tis one works:
rows = model.select().where(
(model.date > start_date) &
(model.name == point_name)
).tuples()
为什么我的代码在查询比给定的日期更小或更小的日期时有效,而当我尝试查询日期范围时却失败了?
您如何将日期存储在数据库中?这是一个预先存在的数据库,还是您使用 Peewee 插入所有记录?我问是因为 SQLite 可以将日期表示为字符串或数字(时间戳)。如果您使用的是字符串,那么日期必须按字典顺序排序才能进行有意义的比较……这就是 Peewee 使用 YYYY-mm-dd 的原因。
如果你的日期排序正确,那么如果你想要包含端点,你应该可以使用 .between()
。否则你可以做 (date_field > low) & (date_field < high)