Я пытаюсь написать синтаксический анализатор SQL-запросов для некоторых команд, чтобы они отображали отношения в форме запроса в виде списка. Но я использую runTests () из PyParsing, который дает логические значения и строку вывода.
Как удалить все пустые словари и кортежи из строки списка.
Я попытался напечатать имя таблицы или столбца напрямую для одного запроса, но он не печатает для этого запроса. Помогите мне напечатать вывод в списке, чтобы позже я смог получить его в CSV-файле.
Это всего лишь небольшая часть кода. Я сослался на sqlparsing из репозитория PyParsing github.
from pyparsing import *
ParserElement.enablePackrat()
delete_stmt = Forward().setName("delete statement")
LPAR,RPAR,COMMA = map(Suppress,"(),")
del_source = ((Group(database_name("database") + "." + table_name("table*")) | table_name("table*")) +
Optional(Optional(AS) + table_alias("table_alias*")) +
Optional(INDEXED + BY + index_name("name") | NOT + INDEXED)("index"))
delete_core = (DELETE + Optional(FROM + del_source("from*")) + Optional(WHERE + expr("where_expr")))
delete_stmt << (delete_core)
test3="""\
delete from abc where c=book
"""
delete_list=select_stmt.runTests(test3)
print(delete_list)
Вот что я получаю: мне нужна верхняя часть, но список печатает последнюю часть, которая является select_list, начиная с логической части.
['DELETE', 'FROM', 'abc', 'WHERE', ['c', '=', 'book']]
delete from abc where c=book
['DELETE', 'FROM', 'abc', 'WHERE', ['c', '=', 'book']]
-from: [['abc']]
[0]:
['abc']
-table: [['abc']]
[0]:
['abc']
-where_expr: ['c', '=', 'book']
(True, [('delete from abc where c=book', (['DELETE', 'FROM', 'abc',
'WHERE',
(['c', '=', 'book'], {})], {'table': [(['abc'], {})], 'from': [(['abc'],
{})], 'where_expr': [(['c', '=', 'book'], {})]}))])