Używam Flask-SQLAlchemy do wykonywania zapytań z bazy danych użytkowników; jednak, podczas gdy
user = models.User.query.filter_by(username="ganye").first()
wróci
<User u'ganye'>
robić
user = models.User.query.filter_by(username="GANYE").first()
zwroty
None
Zastanawiam się, czy istnieje sposób na zapytanie bazy danych w sposób niewrażliwy na wielkość liter, tak aby drugi przykład nadal zwracał
<User u'ganye'>
python
flask
flask-sqlalchemy
Ganye
źródło
źródło
filter_by
metodą, w której indeksowana jest kolumna nazwy użytkownika?Poprawiając odpowiedź @ plaes, ta skróci zapytanie, jeśli określisz tylko kolumny, których potrzebujesz:
user = models.User.query.with_entities(models.User.username).\ filter(models.User.username.ilike("%ganye%")).all()
Powyższy przykład jest bardzo przydatny w przypadku, gdy trzeba użyć jsonify Flask do celów AJAX, a następnie w swoim javascript uzyskać do niego dostęp za pomocą data.result :
from flask import jsonify jsonify(result=user)
źródło
możesz to zrobić
user = db.session.query(User).filter_by(func.lower(User.username)==func.lower("GANYE")).first()
Lub możesz skorzystać z funkcji ilike
user = db.session.query(User).filter_by(User.username.ilike("%ganye%")).first()
źródło