首页 > 解决方案 > “BinaryExpression”对象和“比较器”对象都没有属性“过滤器”

问题描述

我尝试使用“and_()”重叠日期,但出现错误:“BinaryExpression”对象和“比较器”对象都没有属性“过滤器”

dto = date(year=2021, month=4, day=15)
dfrom = date(year=2021, month=4, day=27)
schema = BookSchema(many=True)
bookings = db.session.query(BookData).filter(and_(func.date(BookData.date_from).between(dfrom, dto)).filter(and_(func.date(BookData.date_to).between(dfrom, dto)))).all()

感谢您的回答!

标签: postgresqlflasksqlalchemy

解决方案


请阅读有关如何and_正确使用的文档。

您的查询应如下所示:

bookings = (
    db.session
    .query(BookData)
    .filter(
        and_(
            func.date(BookData.date_from).between(dfrom, dto),
            func.date(BookData.date_to).between(dfrom, dto),
        )
    )
    .all()
)

事实上,鉴于过滤器可以多次应用于查询构造并且这样做意味着AND无论如何,以下内容将完全相同:

bookings = (
    db.session
    .query(BookData)
    .filter(func.date(BookData.date_from).between(dfrom, dto))
    .filter(func.date(BookData.date_to).between(dfrom, dto))
    .all()
)

推荐阅读