Колба Без Учета Регистра-Запрос 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'>
2 74

2 ответа:

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

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

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

приведенный выше пример очень полезен в случае, если нужно использовать Jsonify Flask для целей AJAX, а затем в вашем javascript получить доступ к нему с помощью данные.результат:

from flask import jsonify
jsonify(result=user)