【发布时间】:2021-01-17 09:13:18
【问题描述】:
我正在开发一个系统,其中用户引入了一个 SQL 服务器/数据库连接和一个有效的 SQL 查询,我将它们保存在我的系统上。我正在使用 python+sqlalchemy+pandas 来完成这个。
该查询将返回一个类似这样的表,其中唯一的规则是查询结果必须有一个 timestamp 作为 DateTime 字段,并且至少有另一列具有数值,但名称是随机的。
+-----------+----------+---------+-----+---------+
| timestamp | series_1 | serie_2 | ... | serie_n |
+-----------+----------+---------+-----+---------+
| <time> | numeric | numeric | ... | numeric |
+-----------+----------+---------+-----+---------+
| ... |
+-----------+----------+---------+-----+---------+
| <time> | numeric | numeric | ... | numeric |
+-----------+----------+---------+-----+---------+
然后我有一个调度程序,它使用 cron 格式运行查询,我处理数据并将其存储在我的系统数据库中。问题是,每次我使用调度程序运行查询时,我都会有旧+新记录,为了处理这个问题,我使用 pandas 过滤结果以仅获取新记录,此时性能还可以(20s对于 20 个系列的 10k 条记录,考虑我每周更新 1 次是合理的),但在数据较多的情况下很长一段时间都不是一个好的解决方案。
所以我正在考虑是否可以使用 WHERE 子句包装用户查询结果,以便在查询级别按timestamp 过滤结果,而无需触及查询。
【问题讨论】:
-
你的 Pandas 代码过滤结果是什么样的?
-
@NickODell 我用
df.query("timestamp > @latest_timestamp")
标签: python sql pandas sqlalchemy