MySQL列名的通配符

Cec*_*uez 10 python mysql sql

我试图从数据库中选择多个列,但不是所有列.我想要选择的所有列都将以"word"开头.

所以在伪代码中我想这样做:

SELECT "word%" from searchterms where onstate = 1;
Run Code Online (Sandbox Code Playgroud)

或多或少.我没有找到任何关于如何做到这一点的文档 - 在MySQL中是否可能?基本上,我试图将一个单词列表存储在一行中,并带有一个标识符,我想在拉取记录时将所有单词与该标识符关联起来.所有单词都将作为字符串连接,并使用其标识符传递给数组/字典中的另一个函数.

我试图尽可能多的数据库调用,以保持快速的代码.

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

将有可变数量的列,其中包含名称"word".为每行执行单独的数据库调用会更快,每行生成一次Python查询,或者简单地选择SELECT*会更快,并且只使用我需要的列吗?是否可以说SELECT*NOT XYZ?

Mar*_*ers 10

不,SQL没有为您提供执行此类选择的任何语法.

可以做的是首先向MySQL询问列名列表,然后根据该信息生成SQL查询.

SELECT column_name
FROM information_schema.columns
WHERE table_name = 'your_table'
    AND column_name LIKE 'word%'
Run Code Online (Sandbox Code Playgroud)

让我们选择列名.然后你可以用Python做:

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

我建议使用SQLAlchemy来代替使用字符串连接,而不是使用字符串连接.

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

在这种情况下,只需使用a "SELECT * FROM ..."并使用Python从结果集中挑选出列.