sql >> データベース >  >> RDS >> PostgreSQL

python pandasでdictとしてパラメーターを渡した後、read_sqlクエリは空のデータフレームを返します

    はい、パラメータバインディング(and %(target)s in ('ACT')を介してクエリに列名を設定しようとした結果、問題が発生したと確信しています。 )コメントに記載されているとおり。

    これにより、クエリは結果セットを'status' in ('ACT')のレコードに制限します。 (つまり、文字列'status'は、文字列'ACT'のみを含むリストの要素ですか?)もちろん、これはfalseであるため、レコードは選択されず、空の結果が得られます。

    これは期待どおりに機能するはずです:

    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. MySQLでデータベースを作成するSQLクエリ

    2. OracleSQLでのマルチセットマッピングの予期しない結果

    3. PHPは前のクエリの結果をクエリできますか?

    4. OracleDBMSジョブが実行されていません