Форум сайта python.su
Есть gtk-приложение, которое хранит данные в sqlite-бд.
Модель создаю так
class Patient(Base):
lastname = Column(Unicode)
patients = self.session.query(Patient)
lastname = unicode(self.lastname_entry.get_text())
if lastname:
patients = patients.filter(Patient.lastname.like(u"%%%s%%" % lastname))
SELECT * FROM patients WHERE lastname LIKE "%иванов%"
Офлайн
Сталкивался с этим на sqlite3, правда без sqlalchemy. Решил так:
con=sqlite.connect(database)
con.create_function('myLower',1,lambda x:x.lower())
db=con.cursor()
db.execute('select * from content where myLower(article) like ?')
Офлайн
.ilike()
Офлайн
igor.kaistспс, вариант конечно, но я думаю что есть еще проще решение
Сталкивался с этим на sqlite3, правда без sqlalchemy. Решил так:con=sqlite.connect(database)
con.create_function('myLower',1,lambda x:x.lower())
db=con.cursor()
db.execute('select * from content where myLower(article) like ?')
slav0nicв своем первом сообщении писал что не работает
.ilike()
Отредактировано (Янв. 20, 2011 20:18:25)
Офлайн
Обновил pysqlite и SQLAlchemy - без результатно.
Смотрю что лежит в бд
In [28]: p.lastname
Out[28]: u'\u0413\u0430\u043f\u0447\u0443\u043a'
In [29]: patients.filter(Patient.lastname.ilike(u"%%%s%%" % l.decode('utf-8'))).count()
2011-01-20 21:20:30,950 INFO sqlalchemy.engine.base.Engine.0x...1250 SELECT count(1) AS count_1
FROM patients
WHERE lower(patients.lastname) LIKE lower(?)
2011-01-20 21:20:30,950 INFO sqlalchemy.engine.base.Engine.0x...1250 (u'%\u0433\u0430\u043f\u0447\u0443\u043a%',)
Out[29]: 0
Офлайн
тут бок с sqlite3, почитай http://www.sqlite.org/optoverview.html#like_opt и http://ioannis.mpsounds.net/blog/2009/01/11/sqlite3_unicode-updated-for-sqlite3-v367/
ну и судя из той же доки, lower будет работать для utf-8 только с ICU extension.
Офлайн
slav0nicНашел на хабре похожий топик SQLite и полноценный UNICODE но как-то теплее не стало :)
тут бок с sqlite3, почитай http://www.sqlite.org/optoverview.html#like_opt и http://ioannis.mpsounds.net/blog/2009/01/11/sqlite3_unicode-updated-for-sqlite3-v367/
ну и судя из той же доки, lower будет работать для utf-8 только с ICU extension.
Отредактировано (Янв. 21, 2011 18:01:34)
Офлайн
igor.kaistСпасибо! Работает!
Сталкивался с этим на sqlite3, правда без sqlalchemy.
Офлайн