Анализатор операторов выбора SQL не возвращает тип JOINPython

Программы на Python
Ответить
Anonymous
 Анализатор операторов выбора SQL не возвращает тип JOIN

Сообщение Anonymous »


Я хочу проанализировать оператор SQL Select, который имеет все функции обычного диалекта SQL, такого как MySQL. Я искал библиотеки синтаксического анализа в Python, но не смог найти ту, которая выполняла бы эту работу. Под этим я подразумеваю, что нашел несколько библиотек синтаксического анализа, но они могли анализировать только базовые операторы выбора (FROM и WHERE, даже не ORDER BY). Поэтому в качестве альтернативы я сделал свой собственный парсер (который, как я знаю, совсем не лучшее решение). Я потратил несколько часов на работу над этим, но постоянно получаю странную ошибку и не знаю, как с ней справиться. Прежде чем я покажу код, я просто хочу упомянуть, что если вы знаете библиотеку Python, которая может анализировать операторы SQL, а не только SELECT, но также CREATE TABLE, INSERT и т. д., дайте мне знать.

Вот строка грамматики моего языка:

select_grammar = """ начало: select_statement ";" select_statement: "SELECT" columns_list "FROM" table_list join_list? где_предложение? групповое_предложение? наличие_предложения? orderby_clause? список_колонок: "*" | выражение_столбца ("," выражение_столбца)* столбец_выражение: function_call | имя_столбца | подзапрос имя_столбца: (имя_таблицы ".")? ИМЯ («КАК» ИМЯ)? имя_таблицы: ИМЯ («КАК» ИМЯ)? function_call: NAME "(" function_args ")" ("AS" NAME)? function_args: выражение ("," выражение)* where_clause: условие «ГДЕ» groupby_clause: "GROUP BY" столбец_выражение ("," столбец_выражение)* has_clause: "HAVING" логическое_выражение orderby_clause: "ORDER BY" order_column ("," order_column)* столбец_заказа: выражение_столбца ["ASC" | "DESC"]? условие: логическое_выражение логическое_выражение: логический_терм | логическое_выражение "И" логический_терм | логическое_выражение "ИЛИ" логический_терм | «НЕ» логический_терм логический_терм: сравнение_выражение | "(" логическое_выражение ")" | подзапрос сравнение_выражение: выражение выражение ОПЕРАТОРА | выражение "IS" ("NULL" | "NOT NULL") выражение: (имя_таблицы ".")? ИМЯ | ИНТ | строка | вызов_функции | подзапрос список_таблиц: имя_таблицы ("," имя_таблицы)* | подзапрос подзапрос: "(" select_statement ")" join_list: join_expr+ join_expr: join_type (имя_таблицы | подзапрос) условие «ВКЛ.» join_type: "ВНУТРЕННЕЕ СОЕДИНЕНИЕ" | «ЛЕВОЕ СОЕДИНЕНИЕ» | «ПРАВОЕ ПРИСОЕДИНЕНИЕ» | «ПОЛНОЕ ПРИСОЕДИНЕНИЕ» строка: ESCAPED_STRING | /'[^']*'/ ОПЕРАТОР: «>» | "=" | "
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»