[python] 대소 문자를 구분하지 않는 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'>



답변

필터에서 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()


답변