Ja, ich bin mir ziemlich sicher, dass Ihr Problem darauf zurückzuführen ist, dass Sie versucht haben, Spaltennamen in Ihrer Abfrage über die Parameterbindung festzulegen (and %(target)s in ('ACT')
). ) wie in den Kommentaren erwähnt.
Dies führt dazu, dass Ihre Abfrage die Ergebnismenge auf Datensätze beschränkt, bei denen 'status' in ('ACT')
ist (d.h. ist der String 'status' ein Element einer Liste, die nur den String 'ACT' enthält?). Dies ist natürlich falsch, daher wird kein Datensatz ausgewählt und Sie erhalten ein leeres Ergebnis.
Dies sollte wie erwartet funktionieren:
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)