125

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'>
4

4 に答える 4

242

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"))
于 2013-05-15T19:44:13.680 に答える
17

@plaesの回答を改善すると、必要な列だけを指定すると、クエリが短くなります。

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

上記の例は、AJAX の目的で Flask の jsonify を使用する必要があり、JavaScript でdata.resultを使用してアクセスする必要がある場合に非常に役立ちます。

from flask import jsonify
jsonify(result=user)
于 2015-05-11T21:01:27.890 に答える