bugfix> python > 投稿

私は2つのリストを持っています:1つはの列名が含まれていますカテゴリー変数 以下に示すように、他の数値。

cat_cols = ['stat','zip','turned_off','turned_on']
num_cols = ['acu_m1','acu_cnt_m1','acu_cnt_m2','acu_wifi_m2']

これらは、Redshiftのテーブル内の列名です。

これらをパラメータとして渡して、テーブルの数値列のみを取得しますRedshift(PostgreSql)、それを csv に書く csv を閉じます 。

次に、 cat_cols のみをプルしますそして、 csv を開きますそして、それに追加して閉じます。

これまでの私のクエリ:

#1.Pull num data:
seg = ['seg1','seg2']
sql_data = str(""" SELECT {num_cols} """ + """FROM public.""" + str(seg) + """ order by random() limit 50000 ;""")
df_data = pd.read_sql(sql_data, cnxn)
# Write to csv.
df_data.to_csv("df_sample.csv",index = False)
#2.Pull cat data:
sql_data = str(""" SELECT {cat_cols} """ + """FROM public.""" + str(seg) + """ order by random() limit 50000 ;""")
df_data = pd.read_sql(sql_data, cnxn)
# Append to df_seg.csv and close the connection to csv.
with open("df_sample.csv",'rw'):
    ## Append to the csv ##

Pythonリストに基づいて選択クエリを実行しようとするのはこれが初めてなので、テーブルから選択する列名としてリストを渡す方法にこだわっています。

誰かがこれを手伝ってくれますか?

回答 1 件
  • 必要に応じて、文字列表現でクエリを作成するには、フォーマットメソッドまたはf-strings(python 3.6以降が必要)を使用する方が適切です。

    組み込みの format のみを使用した場合の例  関数。

    seg = ['seg1', 'seg2']
    num_cols = ['acu_m1','acu_cnt_m1','acu_cnt_m2','acu_wifi_m2']
    query = """
    SELECT {} FROM public.{} order by random() limit 50000;
    """.format(', '.join(num_cols), seg)
    print(query)
    
    

    seg からアイテムを1つだけ使用する場合  配列、 seg[0] を使用  または seg[1]  で format  関数。

    これがお役に立てば幸いです!

あなたの答え