一尘不染

MySQL列名称中的通配符

mysql

我试图从数据库中选择多个列,但不是所有列。我要选择的所有列均以“ word”开头。

所以我想用伪代码做到这一点:

SELECT "word%" from searchterms where onstate = 1;

或多或少。我没有找到有关如何执行此操作的任何文档-
MySQL中可能吗?基本上,我试图在一行中存储一个带有标识符的单词列表,并且当我提取记录时,我想将所有单词与该标识符关联。所有单词都将作为字符串连接在一起,并带有其标识符传递给数组/字典中的另一个函数。

我正在尝试进行FEW数据库调用,以保持快速的代码。

好的,这是你们的另一个问题:

将有数量可变的列,其中名称为“ word”。对每一行进行单独的数据库调用会更快,每行都会生成一个Python查询,还是仅选择SELECT
*并仅使用我需要的列会更快?可以说SELECT * NOT XYZ吗?


阅读 607

收藏
2020-05-17

共1个答案

一尘不染

不,SQL不提供任何语法来进行此类选择。

可以 做的是先要求MySQL提供列名列表,然后根据该信息生成SQL查询。

SELECT column_name
FROM information_schema.columns
WHERE table_name = 'your_table'
    AND column_name LIKE 'word%'

让我们选择列名称。然后,您可以在Python中执行以下操作:

"SELECT * FROM your_table WHERE " + ' '.join(['%s = 1' % name for name in columns])

我建议不要使用字符串连接,而建议使用SQLAlchemy来为您生成SQL。

但是,如果您要做的只是限制列数,则根本不需要执行这样的动态查询。数据库的艰苦工作是选择行。在10列或10列中发送5列几乎没有什么区别。

在这种情况下,只需使用,"SELECT * FROM ..."然后使用Python从结果集中选择列即可。

2020-05-17