Выберите конкретные столбцы для чтения из PostgreSQL на основе списка Python - PullRequest
0 голосов
/ 25 мая 2018

У меня есть два списка: один содержит имена столбцов категориальных переменных , а другой числовой, как показано ниже.

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 голосов
/ 25 мая 2018

Если вы хотите сделать запрос в строковом представлении, в вашем случае будет лучше использовать метод format или 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, используйте seg[0] илиseg[1] в функции format.

Надеюсь, это поможет вам!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...