sql >> Database >  >> RDS >> PostgreSQL

read_sql-query retourneert een leeg dataframe nadat ik parameters heb doorgegeven als een dictaat in python panda's

Ja, ik ben er vrij zeker van dat uw probleem het gevolg is van het proberen om kolomnamen in uw zoekopdracht in te stellen via parameterbinding (and %(target)s in ('ACT') ) zoals vermeld in de opmerkingen.

Dit leidt ertoe dat uw zoekopdracht de resultaatset beperkt tot records waar 'status' in ('ACT') (d.w.z. Is de string 'status' een element van een lijst die alleen de string 'ACT' bevat?). Dit is natuurlijk niet waar, daarom wordt er geen record geselecteerd en krijg je een leeg resultaat.

Dit zou moeten werken zoals verwacht:

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)



  1. Database maken in MySQL

  2. Architectuur en afstemming van geheugen in PostgreSQL-databases

  3. Selecteer gegevens tussen 2 datums en gemiddelde output per uur

  4. UPDATE .. LIMIT 1 met SqlAlchemy en PostgreSQL