我通常使用 Pandas 将数据从 MySQL 提取到数据帧中。这很有效,允许我在分析之前操作数据。这个工作流程对我来说效果很好。
我的情况是,我有一个大型 MySQL 数据库(多个表将产生数百万行)。我想提取其中一列与 Pandas 系列中的值匹配的数据。该系列的长度可能不同,并且可能会经常更改。如何从 MySQL 数据库中提取数据,其中其中一列数据是 Pandas 系列中的数据?我探索过的两个选项是:
- 将 MySQL 中的所有数据提取到 Pandas 数据帧中(例如使用 pymysql),然后仅保留我需要的行(使用 df.isin())。
或
- 使用具有多个 WHERE ... OR ... OR 语句的查询来查询 MySQL 数据库(并将其加载到 Pandas 数据框中)。可以使用 Python 生成此查询,以使用 OR 连接列表中的项目。
我想这两种方法都可以工作,但它们似乎都有很高的开销。方法 1 下载大量不必要的数据(这可能很慢,并且安全风险可能更高),而方法 2 仅下载所需的记录,但它需要一个笨拙的查询,其中可能包含数千个 OR 语句。
有更好的选择吗?如果不是,以上两者中哪一个会更受欢迎?
最佳答案
我不熟悉 pandas,但严格来说从数据库的角度来看,您可以将 pandas 值插入到 PANDA_VALUES
表中,然后加入该 PANDA_VALUES
表与您想要从中获取数据的表。
假设您在 PANDA_VALUES
表和包含您的列的表上都有一些索引,JOIN 会非常快。
当然,您必须制定一个流程,以便随着业务需求的变化保持 PANDA_VALUES
表的更新。
希望有帮助。
关于python - 从大型 MySQL 数据库中选择数据,其中一列的值在大量值列表中找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42405493/