我有两个列表:一个包含分类变量的列名,另一个包含如下所示的数字。
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列表进行选择性查询,因此坚持如何将列表作为列名传递以从表中进行选择。
有人可以帮帮我吗?
答案 0 :(得分:1)
如果你愿意,要在字符串表示中进行查询,在你的情况下最好使用format方法,或f-strings(必需的python 3.6 +)。
您的案例示例,仅限内置perf
函数。
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
函数中使用seg[0]
或seg[1]
。
我希望这会对你有所帮助!