Форум сайта python.su
Подскажите, плиз, есть ли в алхимии функции lower/upper?
Надо в фильтр сделать условие выборки: текстовое поле эквивалентно тексту не зависимо от регистра, т.е. к примеру приводить перед сравнением поле в нижний регистр и сравнивать с текстом в нижнем регистре.
Мешать sql и привязываться к конкретной СУБД очень бы не хотелось.
Офлайн
lower/upper - это же методы которые есть у всех cтрок в python.
Офлайн
Сравнивание текста без учета регистра - задача СУБД.
Попробуй использовать sqlalchemy.func.lower/lowercase/lcase. Я SQL не очень хорошо знаю и не могу наверняка сказать как выглядит эта функция. Возможно в разных СУБД имена будут варьироваться.
..bw
Офлайн
bwЭтт понятно, но в итоге sqlalchemy преобразует query в sql
Сравнивание текста без учета регистра - задача СУБД.
Попробуй использовать sqlalchemy.func.lower/lowercase/lcase. Я SQL не очень хорошо знаю и не могу наверняка сказать как выглядит эта функция. Возможно в разных СУБД имена будут варьироваться.
..bw
Отредактировано (Июль 11, 2008 18:28:11)
Офлайн
> sqlalchemy.func.lower/lowercase/lcase - к сожалению уникального метода нет(прийдется SQLить), хотя ОЧЕНЬ СТРАННО, что такое преобразование не реализованно
Тут я не понял чего нет. func генерирует функцию по запросу, любую, тут нет предустановленного набора:
>>> from sqlalchemy import sql
>>> sql.func.lower
<sqlalchemy.sql.expression._FunctionGenerator object at 0xb7e4242c>
>>> _()
<sqlalchemy.sql.expression._Function at 0x-481bda54; lower>
>>> str(_)
'lower()'
>>> str(sql.func.foo('bar'))
'foo(:foo_1)'
Отредактировано (Окт. 6, 2009 08:38:32)
Офлайн
если используете SQLite будьте готовы еще к тому, что функции lower/upper в нем реализованы только для ASCII строк ;)
Офлайн
bw1. У каждой СУБД свой метод, надо это учитывать.
> sqlalchemy.func.lower/lowercase/lcase - к сожалению уникального метода нет(прийдется SQLить), хотя ОЧЕНЬ СТРАННО, что такое преобразование не реализованно
Тут я не понял чего нет. func
Отредактировано (Июль 14, 2008 08:25:04)
Офлайн
PooHДа, если не ошибаюсь, они текст хранили только в ASCII, но в 3-й версии они хранят все только в Unicode.
если используете SQLite будьте готовы еще к тому, что функции lower/upper в нем реализованы только для ASCII строк ;)
Офлайн
1. Я говорил что не владею темой.
2. На сколько я знаю таблицы можно создавать без первичного ключа, проблемы возникают при определении модели (mapper). В mapper ты можешь сам указать первичный ключ для таблицы.
..bw
Офлайн
ingvarТем не менее эти методы и в 3-й версии работают только для ASCII :(
Да, если не ошибаюсь, они текст хранили только в ASCII, но в 3-й версии они хранят все только в Unicode.
Офлайн