#python #sql #pandas #sqlalchemy
#python #sql #pandas #sqlalchemy
Вопрос:
Я работаю над системой, в которой пользователь вводит соединение SQL server / db и действительный SQL-запрос, который я сохраняю в своей системе. Для этого я использую python sqlalchemy pandas.
Этот запрос вернет таблицу, подобную этой, в которой единственным правилом является то, что результат запроса должен иметь timestamp
поле as DateTime и, по крайней мере, еще один столбец с числовыми значениями, но случайным именем.
----------- ---------- --------- ----- ---------
| timestamp | series_1 | serie_2 | ... | serie_n |
----------- ---------- --------- ----- ---------
| <time> | numeric | numeric | ... | numeric |
----------- ---------- --------- ----- ---------
| ... |
----------- ---------- --------- ----- ---------
| <time> | numeric | numeric | ... | numeric |
----------- ---------- --------- ----- ---------
Затем у меня есть планировщик, который запускает запрос с использованием формата cron, и я работаю с данными и сохраняю их в своей системной базе данных. Проблема в том, что каждый раз, когда я запускаю запрос с помощью планировщика, у меня будут старые новые записи, чтобы справиться с этим, я фильтрую результаты с помощью pandas, чтобы получить только новые записи, которые на данный момент в порядке (20 секунд для 10 тыс. записей с 20 сериями, думая о том, что у меня есть1 обновление в неделю является разумным), но это не очень хорошее решение в течение длительного времени с большим количеством данных.
Итак, я думаю о том, могу ли я обернуть результаты пользовательского запроса предложением WHERE для фильтрации результатов timestamp
на уровне запроса, не касаясь запроса.
Комментарии:
1. Как выглядит ваш код pandas для фильтрации результатов?
2. @NickODell Я использую
df.query("timestamp > @latest_timestamp")
Ответ №1:
Я сделал это таким образом:
query = f"SELECT sub.* from ({query}) as sub WHERE sub.timestamp > '{latest_timestamp}' ORDER BY sub.timestamp ASC"