Case Insensitive Flask-SQLAlchemy Query

こ雲淡風輕ζ 提交于 2019-11-26 08:09:05

问题


I\'m using Flask-SQLAlchemy to query from a database of users; however, while

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

will return

<User u\'ganye\'>

doing

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

returns

None

I\'m wondering if there\'s a way to query the database in a case insensitive way, so that the second example will still return

<User u\'ganye\'>

回答1:


You can do it by using either the lower or upper functions in your filter:

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

Another option is to do searching using ilike instead of like:

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



回答2:


Improving on @plaes's answer, this one will make the query shorter if you specify just the column(s) you need:

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

The above example is very useful in case one needs to use Flask's jsonify for AJAX purposes and then in your javascript access it using data.result:

from flask import jsonify
jsonify(result=user)



回答3:


you can do

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

Or you can use ilike function

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


来源:https://stackoverflow.com/questions/16573095/case-insensitive-flask-sqlalchemy-query

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!