2013-05-15 111 views
59

我使用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'> 

回答

110

您可以通過使用做到無論是在你的過濾器lowerupper功能:

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的答案上改進,如果您只指定了一列或多列,您需要:

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

上面的例子是非常有用的一個需要使用瓶對AJAX的目的和jsonify話,那麼在你的JavaScript訪問它使用data.result

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

'ilike'可能會更慢:https://stackoverflow.com/a/20336666/1667018 –