PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zapytanie read_sql zwraca pustą ramkę danych po przekazaniu parametrów jako dykta w pandach python

Tak, jestem całkowicie pewien, że Twój problem wynika z próby ustawienia nazw kolumn w zapytaniu za pomocą powiązania parametrów (and %(target)s in ('ACT') ) jak wspomniano w komentarzach.

Powoduje to, że zapytanie ogranicza zestaw wyników do rekordów, w których 'status' in ('ACT') (tj. czy ciąg „status” jest elementem listy zawierającej tylko ciąg „ACT”?). Jest to oczywiście fałsz, dlatego żaden rekord nie zostanie wybrany i otrzymasz pusty wynik.

To powinno działać zgodnie z oczekiwaniami:

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
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak połączyć Struts 2 z Hibernate i PostgreSQL?

  2. Zamówienie aktualizacji bazy danych

  3. Jak dodać zmienną liczbę godzin do daty w PostgreSQL?

  4. Ciągle otrzymuję relację błędu [TABELA] nie istnieje

  5. Nie można odszyfrować za pomocą pgcrypto z AES-256-CBC, ale AES-128-CBC jest OK