如何在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()
答案
解决方案如下导入 func
从 sqlalchemy
:
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 迁移数据(生成数据库表)与 查询数据