python - 从大型 MySQL 数据库中选择数据,其中一列的值在大量值列表中找到

标签 python mysql sql python-3.x pandas

我通常使用 Pandas 将数据从 MySQL 提取到数据帧中。这很有效,允许我在分析之前操作数据。这个工作流程对我来说效果很好。

我的情况是,我有一个大型 MySQL 数据库(多个表将产生数百万行)。我想提取其中一列与 Pandas 系列中的值匹配的数据。该系列的长度可能不同,并且可能会经常更改。如何从 MySQL 数据库中提取数据,其中其中一列数据是 Pandas 系列中的数据?我探索过的两个选项是:

  1. 将 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/

    相关文章:

    python - 获取类型错误 : 'list' object is not callable when setting index in Pandas Dataframe

    mysql - rails 4 : how to use UNIX_TIMESTAMP with group YEAR + MONTH

    MySQL:程序流程的数据库设计

    mysql - Sql 查询 : count distinct row values relative to other row value 问题

    sql - 为什么 COALESCE 对单个列返回多个无效列名错误?

    python - 将透明图像导入 GAN

    python - 如何比较 Pandas 数据框列中可用的十进制数?

    python - Matplotlib:如何在条形之间获得空间?

    mysql - SQL根据另一个相关表中列的相应最小值/最大值(值)获取值

    sql - 如何在 SQL Server Management Studio 中获取 "real"CSV 格式的导出输出?