根据python列表选择要从PostgreSQL读取的特定列

时间:2018-05-25 14:05:18

标签: python postgresql pandas

我有两个列表:一个包含分类变量的列名,另一个包含如下所示的数字。

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 个答案:

答案 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]

我希望这会对你有所帮助!