[英]filtering posts in flask / SQLalchemy by a date in a datetime column
我正在 Flask 中建立一个网站,我需要找到一种方法来根据end_date
列在过去和当前帖子之间过滤页面上显示的帖子。 所有当前帖子将在一个列表中,过期的帖子将在另一个列表中。
这是 model
class Events(db.Model):
__tablename__="events"
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(45), nullable=False, unique = True)
start_date = db.Column(db.DateTime, default = datetime.utcnow)
end_date = db.Column(db.DateTime, nullable = False)
body = db.Column(db.Text, nullable = False)
form_link=db.Column(db.String(100), nullable = True)
data_link=db.Column(db.String(100), nullable = True)
slug = db.Column(db.String(20))
bg_img = db.Column(db.String(50), nullable = False, server_default = '') #set a default bg img
comments = db.relationship('Comment', lazy=True, backref="Posts")
imgs = db.relationship('EventImgs', lazy=True, backref="pics", cascade="all, delete-orphan")
def __init__(self, *args, **kwargs):
if not 'slug' in kwargs:
kwargs['slug'] = slugify(kwargs.get('title'))
super().__init__(*args, **kwargs)
def __repr__(self) :
return f" Event{self.title}, {self.end_date} "
这是我正在尝试使用的查询。
todays_date = datetime.now
current = Events.query.filter(Events.end_date >= todays_date).all()
past = Events.query.filter(Events.end_date <= todays_date).all()
但是我找不到让这个查询工作的正确方法,要么我得到一个空白集,要么在这篇文章的情况下,我得到以下错误。
sqlalchemy.exc.StatementError: (builtins.TypeError) SQLite DateTime type only accepts Python datetime and date objects as input.
[SQL: SELECT events.id AS events_id, events.title AS events_title, events.start_date AS events_start_date, events.end_date AS events_end_date, events.body AS events_body, events.form_link AS events_form_link, events.data_link AS events_data_link, events.slug AS events_slug, events.bg_img AS events_bg_img
FROM events
WHERE events.end_date >= ?]
[parameters: [immutabledict({})]]
使查询正常工作的最佳方法是什么?
返回的空白集意味着它无法获取与查询匹配的任何记录,您在使用相同查询时是否直接从 db 获取记录?
对于第二个问题,请更新代码以使用datetime.now()
而不是datetime.now
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.