Ya, saya cukup yakin bahwa masalah Anda dihasilkan dari mencoba menetapkan nama kolom dalam kueri Anda melalui pengikatan parameter (and %(target)s in ('ACT')
) seperti yang disebutkan dalam komentar.
Ini menyebabkan kueri Anda membatasi hasil yang disetel ke catatan di mana 'status' in ('ACT')
(yaitu Apakah string 'status' merupakan elemen dari daftar yang hanya berisi string 'ACT'?). Ini, tentu saja, salah, oleh karena itu tidak ada catatan yang dipilih dan Anda mendapatkan hasil yang kosong.
Ini akan berfungsi seperti yang diharapkan:
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)