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

read_sql-forespørgsel returnerer en tom dataramme, efter jeg har videregivet parametre som en dict i python pandas

Ja, jeg er ret sikker på, at dit problem skyldes, at du forsøger at angive kolonnenavne i din forespørgsel via parameterbinding (and %(target)s in ('ACT') ) som nævnt i kommentarerne.

Dette resulterer i, at din forespørgsel begrænser resultatsættet til poster, hvor 'status' in ('ACT') (dvs. er strengen 'status' et element i en liste, der kun indeholder strengen 'ACT'?). Dette er selvfølgelig falsk, derfor bliver ingen post valgt, og du får et tomt resultat.

Dette skulle fungere som forventet:

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. Får fejl under udførelse af Stroredprocedure

  2. Hvilken type JOIN skal bruges

  3. Sådan får du den aktuelle dato i SQLite

  4. Har du brug for at opdatere min enkeltbruger-appdatabase for at tillade flere brugere, hvordan ændres databaseskemaet?