Gan*_*nye 90 python flask flask-sqlalchemy
我正在使用Flask-SQLAlchemy从用户数据库中进行查询; 然而,同时
user = models.User.query.filter_by(username="ganye").first()
Run Code Online (Sandbox Code Playgroud)
将返回
<User u'ganye'>
Run Code Online (Sandbox Code Playgroud)
干
user = models.User.query.filter_by(username="GANYE").first()
Run Code Online (Sandbox Code Playgroud)
回报
None
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种方法以不区分大小写的方式查询数据库,因此第二个示例仍将返回
<User u'ganye'>
Run Code Online (Sandbox Code Playgroud)
pla*_*aes 171
您可以使用过滤器中的lower
或upper
函数来执行此操作:
from sqlalchemy import func
user = models.User.query.filter(func.lower(User.username) == func.lower("GaNyE")).first()
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用ilike
而不是like
:
.query.filter(Model.column.ilike("ganye"))
Run Code Online (Sandbox Code Playgroud)
改进@ plaes的答案,如果你只指定你需要的列,这个将缩短查询:
user = models.User.query.with_entities(models.User.username).\
filter(models.User.username.ilike("%ganye%")).all()
Run Code Online (Sandbox Code Playgroud)
上面的例子非常有用,如果需要使用Flask的jsonify用于AJAX目的,然后在你的javascript中使用data.result访问它:
from flask import jsonify
jsonify(result=user)
Run Code Online (Sandbox Code Playgroud)
你可以做
user = db.session.query(User).filter_by(func.lower(User.username)==func.lower("GANYE")).first()
Run Code Online (Sandbox Code Playgroud)
或者你可以使用 ilike 功能
user = db.session.query(User).filter_by(User.username.ilike("%ganye%")).first()
Run Code Online (Sandbox Code Playgroud)