如何使用 Flask-Restless 按日期搜索模型
Posted
技术标签:
【中文标题】如何使用 Flask-Restless 按日期搜索模型【英文标题】:How to search a model by date with Flask-Restless 【发布时间】:2015-03-08 10:58:06 【问题描述】:根据documentation,搜索查询应如下所示:
GET /api/person?q="filters":["name":"age","op":"ge","val":10]
如何比较日期?我试过了:
GET /api/person?q="filters":["name":"date","op":"<=","val":"1/20/2015"]
即使有些日期早于 2015 年 1 月 20 日,也不会得到任何结果。我试过了:
GET /api/person?q="filters":["name":"date","op":">=","val":"1/20/2015"]
这会恢复所有结果,即使是 2015 年 1 月 20 日之前的结果。
这是用户模型:
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
date = db.Column(db.DateTime)
type =db.Column(db.String(255))
email = db.Column(db.String(255), unique=True)
password = db.Column(db.String(255))
active= db.Column(db.Boolean())
activated_at = db.Column(db.DateTime())
roles = db.relationship('Role', secondary=roles_users,
backref=db.backref('users', lazy='dynamic'))
查询日期的正确方法是什么?
【问题讨论】:
你能把你的模型粘贴到Person
吗?
我刚刚添加了我的Person
模型。
试试/api/person?q="filters":["name":"date","op":"<=","val":"2015-01-20"]
看起来它需要一个json日期时间类型。
它完全符合我的期望。所以 JSON 日期时间的格式是 YYYY-MM-DD
?
【参考方案1】:
大卫主义是绝对正确的,我不应该说 JSON 日期时间 - JSON 本身没有表示日期/日期时间格式的方法 - 它在通信的发送者/接收者端识别“嘿,我我在这里期待一个约会,这看起来像一个约会,我会试着把它当作一个约会”。
通常,大多数人使用 ISO 8601 作为他们在 JSON (2014-10-23T18:25:43.511Z
) 中的日期时间表示,而 Flask-Restless 似乎使用 dateutil.parse
将一些传入值解析回日期时间字段--但奇怪的是,不是 GET。
所以看起来代表您的日期时间值的字符串需要与您的数据库所期望的相匹配——平均而言,这将是一种 ISO 8601 格式。
【讨论】:
我向项目提交了一个拉取请求,因此 Flask-Restless 现在将解析作为查询发送的日期字符串。 github.com/jfinkels/flask-restless/pull/379 非常感谢您的帮助。用于查询和拉取请求。我刚回来阅读您的完整答案,并将其标记为正确。再次感谢您。 我很高兴得到这个答案,谢谢!有没有办法让它不按时过滤?我只想在特定日期查找元组,时间无关紧要,我不会知道。目前,如果我执行Task?q="filters":["name":"taskDate","op":"eq","val":"2015-11-08"]
,我会得到 0 个结果,但如果我执行Task?q="filters":["name":"taskDate","op":"eq","val":"2015-11-08T21:41:43"]
,我会得到 1 个结果你知道如何只过滤日期,而不用担心时间吗?以上是关于如何使用 Flask-Restless 按日期搜索模型的主要内容,如果未能解决你的问题,请参考以下文章
flask-restless 限制 RESTful api 访问