如何在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() 以有点慢。

给TA打赏
共{{data.count}}人
人已打赏
解决方案

PayPal智能支付按钮与服务器端REST API集成

2022-4-21 9:00:11

解决方案

如何在PuLP中初始化LpVariable?

2022-4-21 9:00:13

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索