我使用Sqlalchemy自动化SQL查询,分析我们运行的A / B测试。
以下是一个示例查询:
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'
)
)
在查询之间要改变的是where / and_语句的子句。我如何编写一个能够使用where子句的动态集合的一般声明?我期待这些条款永远是一系列AND条款。
答案 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()
这是使用声明性基本语法,但我认为它是有意义的。