Подстановочные знаки в имени столбца для MySQL

Я пытаюсь выбрать несколько столбцов, но не всех столбцов, из базы данных. Все столбцы, которые я хочу выбрать, начнут с «слова».

Поэтому в псевдокоде я хотел бы сделать это:

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

Более или менее. Я не нахожу документацию о том, как это сделать – возможно ли это в MySQL? В принципе, я пытаюсь сохранить список слов в одной строке с идентификатором, и я хочу связать все слова с этим идентификатором, когда я вытаскиваю записи. Все слова собираются соединяться как строка и передаются другой функции в массиве / словаре с их идентификатором.

Я пытаюсь сделать как можно больше вызовов базы данных FEW, чтобы поддерживать быстрый код.

Хорошо, вот вам еще один вопрос:

Там будет переменное количество столбцов с именем «слово» в них. Будет ли быстрее выполнять отдельный вызов базы данных для каждой строки, сгенерированный запрос Python для каждой строки, или будет быстрее просто SELECT * и использовать только нужные столбцы? Можно ли сказать SELECT * NOT XYZ?

Нет, 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-генерацию для вас.

Однако, если все, что вы делаете, ограничивает количество столбцов, вам вообще не нужно делать динамический запрос. Жесткая работа для базы данных – выбор строк; это не имеет большого значения, чтобы отправить вам 5 столбцов из 10 или все 10.

В этом случае просто используйте "SELECT * FROM ..." и используйте Python для выделения столбцов из набора результатов.

Нет, вы не можете динамически создавать список столбцов, которые нужно выбрать. Он должен быть жестко запрограммирован в вашем окончательном запросе.

В текущем запросе будет создан результат с одним столбцом, а значение этого столбца будет содержать строку "word%" во всех строках, удовлетворяющих условию.

Сначала вы можете сгенерировать список имен столбцов, используя

 SHOW COLUMNS IN tblname LIKE "word%" 

Затем прокрутите курсор и сгенерируйте инструкцию SQL, используя все столбцы из указанного выше запроса.

 "SELECT {0} FROM searchterms WHERE onstate = 1".format(', '.join(columns)) 

Это может быть полезно: подстановочный шаблон MySQL в select

В заключение это невозможно в MySQL напрямую.

То, что вы могли бы сделать как грязное обходное решение, – получить все имена столбцов из таблицы с исходным запросом ( http://dev.mysql.com/doc/refman/5.0/en/show-columns.html ), а затем сравнить python, если имя соответствует вашему шаблону. После этого вы можете сделать оператор выбора MySQL с именами найденных столбцов, например:

 SELECT word1, word2, word3 from searchterms where onstate = 1;