PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

La query read_sql restituisce un dataframe vuoto dopo aver passato i parametri come dict nei panda python

Sì, sono abbastanza sicuro che il tuo problema derivi dal tentativo di impostare i nomi delle colonne nella tua query tramite l'associazione dei parametri (and %(target)s in ('ACT') ) come indicato nei commenti.

Ciò fa sì che la tua query limiti il ​​set di risultati ai record in cui 'status' in ('ACT') (cioè la stringa 'status' è un elemento di un elenco contenente solo la stringa 'ACT'?). Questo è, ovviamente, falso, quindi nessun record viene selezionato e ottieni un risultato vuoto.

Dovrebbe funzionare come previsto:

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)