Да, напълно съм убеден, че проблемът ви е резултат от опит за задаване на имена на колони в заявката ви чрез свързване на параметри (and %(target)s in ('ACT')
), както е споменато в коментарите.
Това води до това, че вашата заявка ограничава набора от резултати до записи, където 'status' in ('ACT')
(т.е. низът „статус“ елемент от списък, съдържащ само низа „ACT“ ли е?). Това, разбира се, е невярно, следователно не се избира запис и получавате празен резултат.
Това трябва да работи според очакванията:
import psycopg2.sql
col_name = 'status'
table_name = 'public.churn_data'
query_params = {'date_from':'201712',
'date_to':'201805',
'drform_target':'NPA'
}
sql_data_sample = """select *
from {0}
where dt = %(date_to)s
and {1} in (%(drform_target)s)
----------------------------------------------------
union all
----------------------------------------------------
(select *
from {0}
where dt = %(date_from)s
and {1} in ('ACT')
order by random() limit 50000);"""
sql_data_sample = sql.SQL(sql_data_sample).format(sql.Identifier(table_name),
sql.Identifier(col_name))
df_data_sample = pd.read_sql(sql_data_sample,con = cnxn,params = query_params)