2013-05-15 18 views
59

Kullanıcı veritabanından sorgulamak için Flask-SQLAlchemy kullanıyorum; AncakCase Insensitive Flask-SQLAlchemy Sorgu

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

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

döner

None 

bir durumda veritabanını sorgulamak için bir yolu olup olmadığını merak ediyorum yapıyor

<User u'ganye'> 

dönecektir duyarsız bir şekilde, böylece ikinci örnek le hala

<User u'ganye'> 

cevap

110

Sen kullanarak bunu yapabilirsiniz dönecektir ya filtrenizde lower veya upper işlevleri:

.query.filter(Model.column.ilike("ganye")) 
:

from sqlalchemy import func 
user = models.User.query.filter(func.lower(User.username) == func.lower("GaNyE")).first() 

Diğer bir seçenek ilike yerine like kullanarak arama yapmak için

3

@ plaes'in yanıtını iyileştirme, yalnızca sütun (ları) belirtirseniz, bu sorguyu daha kısa sürede yapar. İhtiyacınız:

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() 

Yukarıdaki örnek bir AJAX amacıyla ve şişeyi en jsonify kullanması gerekir durumunda çok yararlıdır sonra javascript erişimde bu data.result kullanarak daha yavaş olabilir: https://stackoverflow.com/a/20336666/1667018 –