sql >> Base de Datos >  >> RDS >> PostgreSQL

La consulta read_sql devuelve un marco de datos vacío después de pasar parámetros como un dictado en python pandas

Sí, estoy bastante seguro de que su problema es el resultado de intentar establecer nombres de columnas en su consulta a través del enlace de parámetros (and %(target)s in ('ACT') ) como se menciona en los comentarios.

Esto da como resultado que su consulta restrinja el conjunto de resultados a registros donde 'status' in ('ACT') (es decir, ¿la cadena 'estado' es un elemento de una lista que contiene solo la cadena 'ACT'?). Esto es, por supuesto, falso, por lo que no se selecciona ningún registro y se obtiene un resultado vacío.

Esto debería funcionar como se esperaba:

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)