python - MySQL 用一条语句执行多个相似的选择查询

标签 python mysql select mysql-connector-python

我目前正在使用 MySQL Connector/Python 来查询数据库。

目前,我正在执行的流程之一如下所示:

SELECT some_column FROM some_table WHERE some_column_2 = foo_1;
SELECT some_column FROM some_table WHERE some_column_2 = foo_2;
SELECT some_column FROM some_table WHERE some_column_2 = foo_3;
...
SELECT some_column FROM some_table WHERE some_column_2 = foo_9999;
SELECT some_column FROM some_table WHERE some_column_2 = foo_10000;

我正在运行大量非常相似的查询。

每个查询的单独结果都很重要。即使给定的查询没有产生任何结果。

不幸的是,当前进行数千次查询的方法非常耗时且效率极低。

所以,我的问题是:有什么方法可以将此过程压缩为单个查询,以便它运行更有效吗?

我觉得这在 MySQL 中绝对是可能的,而且我相当确定我在这里遗漏了一些东西。

<小时/>

到目前为止,我已经尝试使用MySQL Connector/Python的executemany()函数,如下所示:

cursor.executemany("SELECT some_column FROM some_table WHERE some_column_2 = %s", foo_list)

我希望这会产生每个单独查询的结果列表,但优化了尽可能多的查询。不幸的是,这似乎在 MySQL Connector/Python 中不起作用,并导致语法错误。

我猜测executemany 不适合与SELECT 语句一起使用,而只能与INSERT 语句一起使用。

<小时/>

我还在互联网上搜索了执行批量选择查询的方法,但尚未找到与我的情况相关的任何内容。

我想明确指出

SELECT some_column FROM some_table WHERE some_column_2 IN (foo_1, foo_2, foo_3, etc);

不是一个有效的解决方案,因为它不保留每个单独查询的结果(或缺少结果)。

<小时/>

欢迎对此提供任何帮助。

最佳答案

而不是

SELECT some_column FROM some_table WHERE some_column_2 IN (foo_1, foo_2, ..., foo_N);

只需询问

SELECT some_column, some_column_2 FROM some_table WHERE some_column_2 IN (foo_1, foo_2, ..., foo_N);

生成查询的代码知道 foo 1..N 值,并且会在第 2 列结果中看到它们的子集。

另外,使用 IN 通常是一种反模式,它会干扰 mysql 优化器创建良好计划的能力。对于大型 IN 子句,您可能会发现最好不要麻烦地填充 FOO 表,然后对其进行联接。

关于python - MySQL 用一条语句执行多个相似的选择查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45623948/

相关文章:

arrays - 从值范围内的 influxdb 记录中选择

firefox - 选择框中的文本垂直对齐 - Firefox 问题

sql - Postgresql 查询以检索具有按深度排序的所有子项的父项

Python 类不工作

python - 如何在等待接收数据时关闭阻塞套接字?

python - NLTK 将树转换为数组?

php - 在 WordPress 中注册时在自定义表中插入值

python - 在python中解压.xls文件

php - 如何从sql查询中获取数值

mysql - Visual Basic 无法转换为 (MySQL)bit 类型