Удалить псевдонимы из SQL-запроса в Python с помощью регулярных выражений? - PullRequest
1 голос
/ 06 июня 2019

Я пытаюсь извлечь имена таблиц из SQL-запроса и сталкиваюсь с некоторыми трудностями при использовании синтаксических анализаторов Python SQL, таких как sqlparse.Проблема заключается в псевдонимах - парсер будет путать реальное имя таблицы с его псевдонимом и будет возвращать только псевдоним.

Моя цель - не редактировать синтаксический анализатор, а вместо этого заранее очистить псевдонимы из SQL-запроса, используя регулярные выражения, чтобы синтаксический анализатор мог выполнять свою работу.

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

Чтобы сделать это явным, с помощью этого запроса (в виде строки):

SELECT * FROM schema.table alias

Регулярное выражение вернет: "SELECT * FROM schema.table" - которое затем будет отправлено для дальнейшегообработка, чтобы получить имя таблицы.Если псевдоним отсутствует, например:

SELECT * FROM schema2.table2

Тогда строка вернет строку без изменений.

Как мне это сделать?Существуют ли другие синтаксические анализаторы Python, которые могли бы справиться с псевдонимами?

1 Ответ

0 голосов
/ 06 июня 2019

Это работает для вас? Он ищет строку, содержащую строку FROM schema.table alias, удаляет псевдоним

import re
string = """
SELECT * FROM schema.table alias
SELECT * FROM schema.table
"""
remove_table_alias = r'(FROM \w+\.\w+)(\s\w+)$'
print(re.sub(remove_table_alias, r'\1', string, flags=re.MULTILINE))

Выход:

SELECT * FROM schema.table 
SELECT * FROM schema.table
...