हां, मुझे पूरा विश्वास है कि आपकी समस्या पैरामीटर बाइंडिंग (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)