python - 关键字不能是表达式 - 在 sqlalchemy 中过滤

标签 python flask sqlalchemy

我用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/

相关文章:

python - SQLAlchemy 计算列

python - 如何修改 pandas df 以调整系列情节的起点?

python - 使用 Enum 的定义顺序作为自然顺序

python - 应用引擎是否有 Deploy Hook 或 Event?

python flask flash 消息异常重启后依然存在

python - 如何在 SQLAlchemy 中使用子查询来生成移动平均线?

python - CSV 到文本文件布局

python - Flask 中的嵌套蓝图?

python - SMTP 服务器断开连接 : please run connect() first

mysql - MySQL 中从日期类型转换为日期时间