2016-06-02 5 views
1

Так что я загрузил некоторые данные из базы данных, которая имеет удобный столбец идентификаторов. Я сохранил максимальный ID для каждой таблицы, к которой я обращаюсь, к маленькому текстовому файлу, который я прочитал в памяти (max_ids dataframe).pandas read sql query improvement

Я пытался создать запрос, где бы я сказал, дайте мне все данные, где Idcol> max_id для этой таблицы. Я получал ошибки, которые были изменены, поэтому я не мог использовать их в параметре. Приведенный ниже код оказался работоспособным, но это был просто процесс угадывания и проверки. Я превратил его в int, а затем строку, которая в основном извлекала фактическое значение из фрейма данных.

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

df= pd.read_sql_query('SELECT * FROM table WHERE Idcol > %s;', engine, params={'max_id', str(int(max_ids['table_max']))}) 

Могу ли я также сделать название таблицы более динамичным? Мне нужно пройти список таблиц. База данных - это MS SQL, и я использую pymssql и sqlalchemy.

Вот пример того, где я побежал max_ids [ 'table_max']:

Out[11]: 
0 1900564174 
Name: max_id, dtype: int64 
+0

Можете ли вы опубликовать образец вашего 'max_ids' DF? или просто вывести вывод 'print (max_ids.head())' – MaxU

+0

уверен, что я сделал редактирование – trench

+0

, ваш 'max_ids' - не похож на кадр данных pandas?!? можете ли вы опубликовать вывод 'print (max_ids.head())'? – MaxU

ответ

2

при условии, что ваш max_ids DF выглядит следующим образом:

In [24]: max_ids 
Out[24]: 
    table table_max 
0 tab_a  33333 
1 tab_b  555555 
2 tab_c 66666666 

вы можете сделать это следующим образом:

qry = 'SELECT * FROM {} WHERE Idcol > :max_id' 

for i, r in max_ids.iterrows(): 
    print('Executing: [%s], max_id: %s' %(qry.format(r['table']), r['table_max'])) 
    pd.read_sql_query(qry.format(r['table']), engine, params={'max_id': r['table_max']})