【问题标题】:Neither 'BinaryExpression' object nor 'Comparator' object has an attribute 'filter'“BinaryExpression”对象和“比较器”对象都没有属性“过滤器”
【发布时间】:2021-07-03 07:27:00
【问题描述】:

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

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()

感谢您的回答!

【问题讨论】:

    标签: postgresql flask sqlalchemy


    【解决方案1】:

    请阅读有关如何正确使用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()
    )
    

    【讨论】:

      猜你喜欢
      • 2017-01-04
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-06
      • 1970-01-01
      相关资源
      最近更新 更多