美文网首页
Flask实战小技巧(1)—— Flask-SQLalchemy

Flask实战小技巧(1)—— Flask-SQLalchemy

作者: 曲谐_ | 来源:发表于2019-08-08 13:14 被阅读0次

业务背景:

  • 某些数据需要筛选后显示,如果是普通的筛选一般都是字符串或数字的形式,然而日期的形式很少用。当前业务需求对某一天的业务日志进行筛选。

思考:

  • 在SQL中,筛选条件可以用where xx="2019-08-07"的写法,但在sqlalchemy中,对datetime数据类型的修改往往不能这么写。

解决方案:

采用sqlalchemy的extract函数和and函数。前者可比较年月日信息,后者可表示sql中的and。
实例:
接口采用POST方法,接口信息:

{
    "date": "2019-08-07",
    "monitor_id": 1
}
  • monitor_id为业务字段,可忽略,重点来看date字段
  • 需要比较的数据:MonitorCameraList模型类中的updated_at字段,datetime类型,见下。
  • 接口传入的date字段是一个字符串,需要先转化成时间元组,可使用datetime的strptime方法。然后datetime中的year,month,day属性可以获取到年月日信息。这一步是很重要的,因为接口传过来的都是变量,你不知道具体是哪一天的信息,因此一定要学会这种对变量做转化的方法
    query = MonitorCameraList.query.filter(
        MonitorCameraList.move_status == 1,
        MonitorCameraList.monitor_id == body["monitor_id"]
    )

    # 筛选条件
    if "date" in body:
        date_tuple = datetime.strptime(body["date"], "%Y-%m-%d")
        query = query.filter(and_(
                extract("year", MonitorCameraList.updated_at) == date_tuple.year,
                extract("month", MonitorCameraList.updated_at) == date_tuple.month,
                extract("day", MonitorCameraList.updated_at) == date_tuple.day
            )
        )
    sth_list = query.all()

使用extract过滤,sth_list字段就可以获得筛选后的结果了。

相关文章

网友评论

      本文标题:Flask实战小技巧(1)—— Flask-SQLalchemy

      本文链接:https://www.haomeiwen.com/subject/rnfxjctx.html