2013-05-15 24 views
59

私はFlask-SQLAlchemyを使用してデータベースのクエリを行います。しかし、しばらく大文字と小文字を区別しないFlask-SQLAlchemyクエリ

user = models.User.query.filter_by(username="ganye").first() 

はケースにデータベースを照会する方法があります場合、私は思ったんだけど

user = models.User.query.filter_by(username="GANYE").first() 

戻り

None 

をやっ

<User u'ganye'> 

を返します。非感受性の方法で、2番目の例ルは、まだあなたのフィルタのいずれかでlowerまたはupper機能を使用することによってそれを行うことができます

<User u'ganye'> 

答えて

110

を返します。

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")) 
3

@ plaesの回答を改善すると、これは単に列を指定するとクエリが短くなります。あなたが必要とする:

from flask import jsonify 
jsonify(result=user) 
+0

'ilike':

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

上記の例では、1つのAJAXの目的のために、フラスコのjsonifyを使用する必要がある場合に非常に便利です、あなたのjavascriptのアクセスにはdata.resultを使用して遅くなる可能性があります:https://stackoverflow.com/a/20336666/1667018 –

関連する問題