sql >> Databáze >  >> RDS >> PostgreSQL

Dotaz read_sql vrací prázdný datový rámec poté, co předám parametry jako dict v python pandas

Ano, jsem si docela jistý, že váš problém vyplývá z pokusu nastavit názvy sloupců ve vašem dotazu pomocí vazby parametrů (and %(target)s in ('ACT') ), jak je uvedeno v komentářích.

Výsledkem je, že váš dotaz omezí sadu výsledků na záznamy, kde je 'status' in ('ACT') (tj. Je řetězec 'stav' prvkem seznamu obsahujícího pouze řetězec 'ACT'?). To je samozřejmě nepravda, proto nebude vybrán žádný záznam a dostanete prázdný výsledek.

To by mělo fungovat podle očekávání:

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. 8 způsobů, jak přidat hodinu k datu a času v MariaDB

  2. Jak přeskočit řádky, které porušují omezení při vkládání dat do SQLite

  3. Závažná chyba:Nezachycená chyba:Volání nedefinované funkce mysql_connect()

  4. Mohu aktualizovat právě přidaný řádek pomocí spouštěčů MySQL