사용자 데이터베이스에서 쿼리하기 위해 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'>
답변
필터에서 lower
또는 upper
함수를 사용하여 수행 할 수 있습니다 .
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"))
답변
@plaes의 답변을 개선하면 필요한 열만 지정하면 쿼리가 더 짧아집니다.
user = models.User.query.with_entities(models.User.username).\
filter(models.User.username.ilike("%ganye%")).all()
위의 예제는 AJAX 목적으로 Flask의 jsonify를 사용하고 자바 스크립트에서 data.result를 사용하여 액세스해야하는 경우 매우 유용합니다 .
from flask import jsonify
jsonify(result=user)
답변
넌 할 수있어
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()