2013-05-15 1 views
59

Я использую Flask-SQLAlchemy для запроса из базы данных пользователей; Однако, в то время какНечувствительный к регистру флагом запрос 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

Вы можете сделать это с помощью либо 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")) 
3

Улучшая ответ на @ plaes, этот вопрос сделает запрос короче, если вы укажете только столбец (столбцы) вам нужно:

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

Приведенный выше пример является очень полезным в случае, если один должен использовать jsonify КОЛБУ в AJAX для целей, а затем в вашем яваскрипта доступ к нему с помощью data.result:

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

'ilike' может быть медленнее: https://stackoverflow.com/a/20336666/1667018 –