PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

consulta read_sql retorna um dataframe vazio depois que eu passo parâmetros como um dict em python pandas


Sim, estou bastante confiante de que seu problema resulta da tentativa de definir nomes de coluna em sua consulta por meio de associação de parâmetro (and %(target)s in ('ACT') ) conforme mencionado nos comentários.

Isso resulta em sua consulta restringindo o conjunto de resultados a registros em que 'status' in ('ACT') (ou seja, a string 'status' é um elemento de uma lista contendo apenas a string 'ACT'?). Obviamente, isso é falso, portanto, nenhum registro é selecionado e você obtém um resultado vazio.

Isso deve funcionar como esperado:
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)