我看了那个链接
这很奇怪,因为我正在做的查询是命中和错过。 如果差异仅为几天,则无法显示日期
SQLAlchemy: how to filter date field?
模型:
class UserCallsModel(db.Model):
id = db.Column(db.Integer, primary_key = True)
date = db.Column(db.String(90))
username = db.Column(db.String(90))
event_name = db.Column(db.String(90))
查询:
users = UserCallsModel.query.filter(UserCallsModel.date.between("2016-1-1", "2016-1-20")).order_by(UserCallsModel.date.desc())
我有2个日期属于这个范围但未被查询?
答案 0 :(得分:2)
我不熟悉MySQL,但我想它和PG一样,我在下面列出了输出。
当你使用“between”方法时,你最终会使用“BETWEEN”运算符,就像这样......
SELECT * FROM my_table WHERE date BETWEEN '2016-1-1' AND '2016-1-20'
问题是“between”运算符对日期与字符串做了不同的事情。例如,如果它正在测试的值是一个字符串,它会将参数('2016-1-1' AND '2016-1-20'
部分)视为字符串。
mhildreth=# select '2016-1-5' between '2016-1-1' AND '2016-1-10';
?column?
----------
f
(1 row)
同时,如果它正在测试的值是一个日期对象,那么它将隐式地将字符串转换为日期对象,基本上执行以下操作...
mhildreth=# select '2016-1-5'::date between '2016-1-1'::date AND '2016-1-10'::date;
?column?
----------
t
(1 row)
因此,我的猜测是您希望将“日期”列转换为日期类型。如果必须保留字符串,则需要确保使用的日期格式在进行字符串比较时也有效。因此,您需要2016-01-01
而不是2016-1-1
。
答案 1 :(得分:0)
我的印象是,只要字符串具有某种格式,就会实际正确查询字符串。但不,我不敢这样做。
如果你有这样格式的字符串,这是一个更好的方法:
"2016-1-5"
只是将字符串日期转换为datetime.date对象
python 3
import datetime
splitted_date = [int(number) for number in "2016-1-5".split("-")]
formatted_date = datetime.date(*splitted_date)