PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

La requête read_sql renvoie une trame de données vide après avoir passé des paramètres en tant que dict dans les pandas python

Oui, je suis tout à fait convaincu que votre problème résulte de la tentative de définition des noms de colonnes dans votre requête via la liaison de paramètres (and %(target)s in ('ACT') ) comme mentionné dans les commentaires.

Il en résulte que votre requête limite le jeu de résultats aux enregistrements où 'status' in ('ACT') (c'est-à-dire que la chaîne 'status' est-elle un élément d'une liste contenant uniquement la chaîne 'ACT' ?). Ceci est, bien sûr, faux, donc aucun enregistrement n'est sélectionné et vous obtenez un résultat vide.

Cela devrait fonctionner comme prévu :

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)