Có, tôi khá tin tưởng rằng vấn đề của bạn là do cố gắng đặt tên cột trong truy vấn của bạn thông qua liên kết tham số (and %(target)s in ('ACT')
) như đã đề cập trong các bình luận.
Điều này dẫn đến truy vấn của bạn giới hạn tập kết quả thành các bản ghi có 'status' in ('ACT')
(nghĩa là chuỗi 'trạng thái' có phải là một phần tử của danh sách chỉ chứa chuỗi 'ACT' không?). Tất nhiên, điều này là sai, do đó không có bản ghi nào được chọn và bạn nhận được kết quả trống.
Điều này sẽ hoạt động như mong đợi:
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)