Ano, jsem si docela jistý, že váš problém vyplývá z pokusu nastavit názvy sloupců ve vašem dotazu pomocí vazby parametrů (and %(target)s in ('ACT')
), jak je uvedeno v komentářích.
Výsledkem je, že váš dotaz omezí sadu výsledků na záznamy, kde je 'status' in ('ACT')
(tj. Je řetězec 'stav' prvkem seznamu obsahujícího pouze řetězec 'ACT'?). To je samozřejmě nepravda, proto nebude vybrán žádný záznam a dostanete prázdný výsledek.
To by mělo fungovat podle očekávání:
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)