web-dev-qa-db-ja.com

大文字と小文字を区別しない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

私は、大文字と小文字を区別しない方法でデータベースを照会する方法があるのだろうかと思っているので、2番目の例はまだ返されます

<User u'ganye'>
86
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"))
164
plaes

@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)
9
iChux

できるよ

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()
1
Mohammad Aarif