Найти - Пользователи
Полная версия: SQLAlchemy lower\upper
Начало » Базы данных » SQLAlchemy lower\upper
1 2
ingvar
Подскажите, плиз, есть ли в алхимии функции lower/upper?

Надо в фильтр сделать условие выборки: текстовое поле эквивалентно тексту не зависимо от регистра, т.е. к примеру приводить перед сравнением поле в нижний регистр и сравнивать с текстом в нижнем регистре.

Мешать sql и привязываться к конкретной СУБД очень бы не хотелось.
Ferroman
lower/upper - это же методы которые есть у всех cтрок в python.
bw
Сравнивание текста без учета регистра - задача СУБД.
Попробуй использовать sqlalchemy.func.lower/lowercase/lcase. Я SQL не очень хорошо знаю и не могу наверняка сказать как выглядит эта функция. Возможно в разных СУБД имена будут варьироваться.

..bw
ingvar
bw
Сравнивание текста без учета регистра - задача СУБД.
Попробуй использовать sqlalchemy.func.lower/lowercase/lcase. Я SQL не очень хорошо знаю и не могу наверняка сказать как выглядит эта функция. Возможно в разных СУБД имена будут варьироваться.

..bw
Этт понятно, но в итоге sqlalchemy преобразует query в sql

sqlalchemy.func.lower/lowercase/lcase - к сожалению уникального метода нет(прийдется SQLить), хотя ОЧЕНЬ СТРАННО, что такое преобразование не реализованно,

ЗЫ: SQL-прогю уже 10 лет, хотел перейти на ООП для академического интереса…видать сколько прослоек не создавай…тут даже элементарные функции в выборке не реализованны :(

ЗЫЫ: ППЦ, нет в жизни счастья ООП, http://markmail.org/message/mwgpsmvd52bdexqo, походу надо забыть о кросс-платформенности SQLAlchemy в питоне и прогить словарями-выборками-SQL :(((
bw
> 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)'
..bw
PooH
если используете SQLite будьте готовы еще к тому, что функции lower/upper в нем реализованы только для ASCII строк ;)
ingvar
bw
> sqlalchemy.func.lower/lowercase/lcase - к сожалению уникального метода нет(прийдется SQLить), хотя ОЧЕНЬ СТРАННО, что такое преобразование не реализованно
Тут я не понял чего нет. func
1. У каждой СУБД свой метод, надо это учитывать.

2. Кто-нибудь сталкивался с таблицами, в которых нет первичных ключей? (алхимия на них ругается и “трясет” обязательно первичный ключ)
ingvar
PooH
если используете SQLite будьте готовы еще к тому, что функции lower/upper в нем реализованы только для ASCII строк ;)
Да, если не ошибаюсь, они текст хранили только в ASCII, но в 3-й версии они хранят все только в Unicode.
bw
1. Я говорил что не владею темой.
2. На сколько я знаю таблицы можно создавать без первичного ключа, проблемы возникают при определении модели (mapper). В mapper ты можешь сам указать первичный ключ для таблицы.

..bw
PooH
ingvar
Да, если не ошибаюсь, они текст хранили только в ASCII, но в 3-й версии они хранят все только в Unicode.
Тем не менее эти методы и в 3-й версии работают только для ASCII :(
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB