Case Insensitive Flask-SQLAlchemy Query

时间:2013-05-15 19:08:15

标签: python flask flask-sqlalchemy

我正在使用Flask-SQLAlchemy从用户数据库中进行查询;然而,而

user = models.User.query.filter_by(username="ganye").first()

将返回

<User u'ganye'>

操作

user = models.User.query.filter_by(username="GANYE").first()

返回

None

我想知道是否有办法以不区分大小写的方式查询数据库,以便第二个示例仍然会返回

<User u'ganye'>

3 个答案:

答案 0 :(得分:158)

您可以使用过滤器中的lowerupper功能来执行此操作:

from sqlalchemy import func
user = models.User.query.filter(func.lower(User.username) == func.lower("GaNyE")).first()

另一种选择是使用ilike代替like进行搜索:

.query.filter(Model.column.ilike("ganye"))

答案 1 :(得分:9)

改进@ plaes的答案,如果你只指定你需要的列,这个将缩短查询: user = models.User.query.with_entities(models.User.username)。\ 滤波器(models.User.username.ilike(&#34;%%干谒&#34))。所有() 上面的例子非常有用,如果需要使用Flask的jsonify用于AJAX目的,然后在你的javascript中使用data.result访问它: 来自flask import jsonify jsonify(结果=用户)

答案 2 :(得分:1)

可以做到

user = db.session.query(User).filter_by(func.lower(User.username)==func.lower("GANYE")).first()

或者您可以使用ilike函数

 user = db.session.query(User).filter_by(User.username.ilike("%ganye%")).first()