如何在flask-sqlalchemy中过滤datetime.utcnow()到一个特定的date.today()。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在flask-sqlalchemy中过滤datetime.utcnow()到一个特定的date.today()。相关的知识,希望对你有一定的参考价值。

我有一个 Order 对象有 created_on 字段。

created_on = db.Column(db.DateTime, default=datetime.utcnow())

现在,我试图通过使用 number_of_order_a_day 函数。

@classmethod
def number_of_order_a_day(cls):
    return cls.query.filter(cls.created_on.like('%{}'.format(date.today()))).count()

但这个函数的回报是: 0.

这是我的 OrderModel 类,我有一个带有created_on字段的订单对象。

import sqlite3
from datetime import datetime, date
from app import db



class OrderModel(db.Model):
    __tablename__ = "orders"

    id = db.Column(db.Integer, primary_key = True)
    order_number = db.Column(db.String(80))
    created_on = db.Column(db.DateTime, default=datetime.utcnow())


    def __init__(self, order_number, created_on):
        self.order_number = order_number
        self.created_on = created_on


    @classmethod
    def find_by_id(cls, id):
        return cls.query.filter_by(id = id).first() 

    @classmethod
    def find_by_order_number(cls, order_number):
        return cls.query.filter_by(order_number = order_number).first() 

    @classmethod
    def number_of_order_a_day(cls):
        return cls.query.filter(cls.created_on.like('{}'.format(date.today()))).count()


    def save_to_db(self):
        db.session.add(self)
        db.session.commit()

    def delete_from_db(self):
        db.session.delete(self)
        db.session.commit()
答案

解决方案如下导入 funcsqlalchemy:

from sqlalchemy import func

然后是 number_of_order_a_day 功能

@classmethod
def number_of_order_a_day(cls):
    return cls.query.filter(func.DATE(cls.created_on) == datetime.utcnow().date()).all()

而不是 count() 我将所有匹配的订单按日期以列表的形式返回。然后在订单资源页面得到 number_of_order_a_day 借助 len() 列表函数。

number_of_order_a_day = len(OrderModel.number_of_order_a_day()) 

我发现 count() 以有点慢。

以上是关于如何在flask-sqlalchemy中过滤datetime.utcnow()到一个特定的date.today()。的主要内容,如果未能解决你的问题,请参考以下文章

flask-sqlalchemy 迁移数据(生成数据库表)与 查询数据

如何通过将正常日期和日期时间与时区进行比较来过滤数据?

Flask框架从入门到精通之模型查询(十三)

Flask框架从入门到精通之模型查询(十三)

如何在 Celery 任务中使用 Flask-SQLAlchemy

过滤 2D numpy 数组