我用sqlalchemy创建了一个简单的数据库
class BlogPost(db.Model):
id = db.Column(db.Integer, primary_key=True)
post = db.Column(db.Text, nullable=False)
create_date = db.Column(db.DateTime, nullable=False)
create_date 的格式为 (year-month-day h:m:s.ms):
2018-02-20 21:45:37.591733
我用的是datetime.datetime
例如,我想过滤所有 year=2018 的帖子,这里我遇到了问题:
posts = BlogPost.query.filter_by(create_date.year=2018)
可以使用 datetime.year 但我不能将它用作 sqlalchemy 过滤中的表达式,上面的代码返回:
SyntaxError: keyword can't be an expression
正确的语法是:create_date=...
,但我只需要比较年份,而不是整个数据对象
有没有可能以一种简单的方式做到这一点?有什么建议吗?
最佳答案
我的方法是使用between()
:
from datetime import datetime
dt_from = datetime(2018, 1, 1)
dt_to = datetime(2018, 12, 31, 23, 59, 59)
BlogPost.query.filter(db.between(BlogPost.create_date, dt_from, dt_to))
或and_()
表示法:
BlogPost.query.filter(db.and_(BlogPost.create_date >= dt_from, BlogPost.create_date <= dt_to))
文档中的更多信息:
关于python - 关键字不能是表达式 - 在 sqlalchemy 中过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49589647/