Синтаксический анализ SQL в Python

#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 , он напечатает все целиком, но если вы оставите это таким образом, он будет печатать токены каждой подстроки строки.

Смотрите эту страницу для получения дополнительной информации.