【问题标题】:SQL apply where clause to an arbitrary query resultsSQL将where子句应用于任意查询结果
【发布时间】: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 &gt; @latest_timestamp")

标签: python sql pandas sqlalchemy


【解决方案1】:

我是这样做的:

query = f"SELECT sub.* from ({query}) as sub WHERE sub.timestamp > '{latest_timestamp}' ORDER BY sub.timestamp ASC"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-04
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多