Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 15, 2008 14:05:50

axe
От:
Зарегистрирован: 2008-08-07
Сообщения: 256
Репутация: +  0  -
Профиль   Отправить e-mail  

sqlalchemy select: передать на вход and_ сгенерированный набор условий

версия алхимии 0.4.7

в выражении select нужно использовать несколько условий. соединяю их через and_

        l_Select =  select( [attr.c.column_id], 
and_(attr.c.expression == None,
attr.c.column_id > 0)
)
по задаче, – какие-то из условий выборки могут быть отключены, какие-то могут появляться в специальных случаях

как в процессе выполнения программы динамически сгенерировать параметры для and_ ?

по-моему, в более старых версиях алхимии была возможность вместо and_ передавать на вход dict
да/нет?



Офлайн

#2 Сен. 15, 2008 15:06:37

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

sqlalchemy select: передать на вход and_ сгенерированный набор условий

грубо говоря

filters = []
if f1():
filters.append(attr.c.expression == None)
if f2():
filters.append(attr.c.column_id > 0)
l_Select = select( [attr.c.column_id], and_(*filters))



Офлайн

#3 Сен. 15, 2008 15:14:29

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

sqlalchemy select: передать на вход and_ сгенерированный набор условий

>>> from sqlalchemy import MetaData, Table, Column, Integer, or_
>>> m = MetaData()
>>> t = Table('foo', m, Column('id', Integer, primary_key = True))

>>> clause = or_()
>>> clause.append(t.c.id == 1)
>>> clause.append(t.c.id == 2)

>>> print clause.compile()
foo.id = :id_1 OR foo.id = :id_2
>>> print clause.compile().params
{'id_2': 2, 'id_1': 1}
>>> print t.select(clause)
SELECT foo.id
FROM foo
WHERE foo.id = :id_1 OR foo.id = :id_2
..bw



Отредактировано (Сен. 15, 2008 15:15:24)

Офлайн

#4 Сен. 15, 2008 16:15:18

axe
От:
Зарегистрирован: 2008-08-07
Сообщения: 256
Репутация: +  0  -
Профиль   Отправить e-mail  

sqlalchemy select: передать на вход and_ сгенерированный набор условий

спасибо за оба варианта!
проверил, работают.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version