2016-08-25 1 views
0

Я хочу передать переменную «single_column» через pd.read_sql_query в цикле:pyodbc/sqlalchemy - читать каждый столбец в таблице, используя pd.read_sql_query. Проходят переменную через запрос

for single_column in columns_list:  
    df_trial_queries = pd.read_sql_query("SELECT single_column FROM dw.db.table;",db_cnxn) 

Я попытался использовать что-то вроде этого:

for single_column in columns_list:  
     df_trial_queries = pd.read_sql_query("SELECT %(column_name)s FROM dw.db.table;",db_cnxn,params = {'column_name':single_column}) 

Нет удачи на всех!

ответ

1

Вы не можете «paremeterize» имена таблиц или столбцов в SQL (SQL позволяет «параметризация» только literals), но вы можете легко сделать это на уровне Python:

In [25]: single_column = 'col1' 

In [52]: table = 'dw.db.table' 

In [53]: "SELECT {} FROM {}".format(single_column, table) 
Out[53]: 'SELECT col1 FROM dw.db.table' 

или в вашем случае:

df_trial_queries = pd.read_sql_query("SELECT {} FROM dw.db.table".format(single_column), db_cnxn) 

ПРИМЕЧАНИЕ: это очень неэффективный способ! Я уверен, что есть лучший способ достичь ваших целей, но вам нужно пролить свет на то, что вы собираетесь достичь, используя этот цикл ...

+0

из каждого столбца, который считывается с сервера в dataframe , Я хочу запустить профилирование данных и описательную статистику, а затем сохранить в файл csv. Я делаю это, потому что таблица имеет 52 миллиона строк и 80 столбцов – dsl1990

+0

@ dsl1990, может ли «некоторая профилирование данных и описательная статистика» выполняться на стороне SQL-сервера? – MaxU

+0

Я могу это сделать, но есть много таблиц, и мне придется писать sql-запросы. Я хотел сделать автоматические циклы для этого. Я отмечаю это как правильный ответ, но вы можете его отредактировать, если мне нужно передать две такие переменные вместо одного – dsl1990

Смежные вопросы