はい、パラメータバインディング(and %(target)s in ('ACT')
を介してクエリに列名を設定しようとした結果、問題が発生したと確信しています。 )コメントに記載されているとおり。
これにより、クエリは結果セットを'status' in ('ACT')
のレコードに制限します。 (つまり、文字列'status'は、文字列'ACT'のみを含むリストの要素ですか?)もちろん、これはfalseであるため、レコードは選択されず、空の結果が得られます。
これは期待どおりに機能するはずです:
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)