sql >> Databasteknik >  >> RDS >> PostgreSQL

read_sql-frågan returnerar en tom dataram efter att jag skickat parametrar som en dict i python pandas

Ja, jag är ganska säker på att ditt problem beror på att du försöker ställa in kolumnnamn i din fråga via parameterbindning (and %(target)s in ('ACT') ) som nämnts i kommentarerna.

Detta resulterar i att din fråga begränsar resultatuppsättningen till poster där 'status' in ('ACT') (dvs. Är strängen 'status' ett element i en lista som endast innehåller strängen 'ACT'?). Detta är naturligtvis falskt, därför väljs ingen post och du får ett tomt resultat.

Detta bör fungera som förväntat:

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. varför frågan tar för lång tid

  2. rumsfel:Kolumnerna som returneras av frågan har inte fälten fältnamn

  3. Om SQLite

  4. Hämta data baserat på månad av ett kvartal i sql