不区分大小写的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'> 

您可以通过在filter中使用lowerupper函数来实现:

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

另一个select是使用ilikesearch,而不是like

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

改进@ plaes的答案,如果你只指定了你所需要的列,这个将会使查询更短:

 user = models.User.query.with_entities(models.User.username).\ filter(models.User.username.ilike("%ganye%")).all() 

上面的例子对于需要使用Flask的jsonify用于AJAX目的非常有用,然后在javascript中使用data.result访问它:

 from flask import jsonify jsonify(result=user)