#python #sql #python-3.x #parsing
#питон #sql #python-3.x #синтаксический анализ
Вопрос:
Я ищу анализатор SQL на Python.
ВЫБЕРИТЕ имя_столбца ИЗ имя_таблицы, ГДЕ условие ГРУППИРУЕТСЯ ПО имя_столбца УПОРЯДОЧИВАЕТСЯ ПО имя_столбца;
Используя анализатор, я хочу разобрать только «where condition», и он должен напечатать «where condition», другая часть должна быть проигнорирована.
Пожалуйста, ознакомьтесь с частью кодирования.
Ответ №1:
Общая проблема, которую вы описываете, немного неограниченна, потому что в общем SQL-запросе WHERE
ключевое слово может появляться несколько раз, в подзапросах и т.д. Для выбора одного уровня, который вы указали выше, вы могли бы использовать:
sql = "SELECT column_name(s) FROM table_name WHERE condition GROUP BY column_name(s) ORDER BY column_name(s);"
where = re.findall(r'WHEREs (.*?)(?=s b(?:GROUP BY|HAVING|ORDER BY)b|$)', sql)
print(where)
Это выводит:
condition
Ответ №2:
Вам нужно будет импортировать sqlparse
библиотеку, но она совместима только с Python 3.5 .
Вот пример кода с тем, что я нашел:
import sqlparse
where = sqlparse.parse('SELECT column_name(s) FROM table_name WHERE condition GROUP BY column_name(s) ORDER BY column_name(s);')[0]
print(where.tokens)
Дело в том, что на самом деле он не анализирует то, что вы ищете. Если вы удалите tokens
, он напечатает все целиком, но если вы оставите это таким образом, он будет печатать токены каждой подстроки строки.
Смотрите эту страницу для получения дополнительной информации.