Ja, ik ben er vrij zeker van dat uw probleem het gevolg is van het proberen om kolomnamen in uw zoekopdracht in te stellen via parameterbinding (and %(target)s in ('ACT')
) zoals vermeld in de opmerkingen.
Dit leidt ertoe dat uw zoekopdracht de resultaatset beperkt tot records waar 'status' in ('ACT')
(d.w.z. Is de string 'status' een element van een lijst die alleen de string 'ACT' bevat?). Dit is natuurlijk niet waar, daarom wordt er geen record geselecteerd en krijg je een leeg resultaat.
Dit zou moeten werken zoals verwacht:
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)