Sí, estoy bastante seguro de que su problema es el resultado de intentar establecer nombres de columnas en su consulta a través del enlace de parámetros (and %(target)s in ('ACT')
) como se menciona en los comentarios.
Esto da como resultado que su consulta restrinja el conjunto de resultados a registros donde 'status' in ('ACT')
(es decir, ¿la cadena 'estado' es un elemento de una lista que contiene solo la cadena 'ACT'?). Esto es, por supuesto, falso, por lo que no se selecciona ningún registro y se obtiene un resultado vacío.
Esto debería funcionar como se esperaba:
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)