2017-01-07 3 views
0

Я использую Sqlalchemy для автоматизации SQL-запросов, анализирующих тесты A/B, которые мы запускаем.Динамическое создание операторов where во время выполнения

Вот пример запрос:

uniques_by_day = select([ 
         first_seen_byos.c.unique_id, 
         func.date_trunc('day', a_unique_users.c.ds).label('current_day'), 
         func.date_trunc('day', first_seen_byos.c.ds).label('cohort_join_day') 
         ]).\ 
        select_from(joined_table).\ 
        where(
         and_(
          a_unique_users.c.os_type == 'iphone_native_app', 
          first_seen_byos.c.ds >= '2017-01-01' 
          ) 
         ) 

Что будет меняться между запросами является положением для где/and_ заявления. Как я могу написать общее утверждение, которое может потреблять динамический набор предложений where? Я ожидаю, что эти положения всегда будут серией предложений AND.

+1

делает 'где (1 = 1 и _ (...))' help? –

+0

Не знаю, как я буду использовать это в этом контексте –

ответ

1

я обычно делаю что-то вроде этого, когда мне нужно динамически построить запрос:

query = session.query(MyTable) 
if case_1: 
    query = query.filter(MyTable.column_1 == 'foo') 
if case_2: 
    query = query.filter(MyTable.column_2 == 'bar') 
query_results = query.all() 

Это использует декларативный базовый синтаксис, но я думаю, что он получает представление в поперечнике.

Смежные вопросы