【问题标题】:Filter by string length less than in Flask SQLalchemy?按小于 Flask SQLalchemy 的字符串长度过滤?
【发布时间】:2020-06-20 14:42:48
【问题描述】:

在 Flask SQLAlchemy 中,我试图返回标题列中字符串长度小于 60 个字符的所有记录。

我试过了:

Users.query.filter_by(len(self.obj.title) < 60).all() 返回类型错误:TypeError: 'InstrumentedAttribute' 类型的对象没有 len()

然后我尝试了:

Users.query.filter_by(len(self.obj.title.str) < 60).all()

它没有返回错误,但没有返回任何查询,即使 db 中有标题列字符串长度小于 60 个字符的记录。

最后,受到以下q/a的启发,我尝试了:

from sqlalchemy.sql.expression import func

Users.query.filter_by(func.length(self.obj.title.shorttext) < 60).all()

同样,没有错误,但没有返回任何内容。

我错过了什么?

【问题讨论】:

    标签: python flask-sqlalchemy


    【解决方案1】:

    也许这是一个错字,但不能在filter_by 中使用长度函数,因为它只接受关键字参数而不是表达式。

    无论如何,当使用查询 filter 方法时,它需要类(例如Users)而不是对象。因此过滤器将在 Flask SQLAlchemy 中编写如下:

    from sqlalchemy.sql.expression import func
    
    Users.query.filter_by(func.length(Users.title) < 60).all()
    

    参考资料:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-26
      • 1970-01-01
      • 2014-08-01
      • 2020-05-03
      • 2021-11-18
      • 2018-10-14
      相关资源
      最近更新 更多