извлечь все имена столбцов из SQL-запроса в Python, используя sqlparse - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь извлечь все имена столбцов из заданного SQL-запроса (MySQL для начала).Я использую модуль sqlparser в python.

У меня есть простой код для извлечения столбцов, пока не будет достигнуто ключевое слово "from".Как я могу получить имена столбцов из остальной части запроса.

def parse_sql_columns(sql):
    columns = []
    parsed = sqlparse.parse(sql)
    stmt = parsed[0]
    for token in stmt.tokens:
        if isinstance(token, IdentifierList):
            for identifier in token.get_identifiers():
                columns.append(str(identifier))
        if isinstance(token, Identifier):
            columns.append(str(token))
        if token.ttype is Keyword:  # from
            break
    return columns

пример запроса:

string2 = "SELECT test, ru.iuserid AS passengerid, ru.vimgname FROM ratings_user_driver AS rate LEFT JOIN trips AS tr ON tr.itripid = rate.itripid LEFT JOIN register_user AS ru ON ru.iuserid = tr.iuserid WHERE tr.idriverid='5083' AND tr.iactive='Finished' AND tr.ehailtrip='No' AND rate.eusertype='Passenger' ORDER BY tr.itripid DESC LIMIT 0,10;"

ожидаемый результат:

["test", "ru.iuserid AS passengerid", "ru.vimgname", "tr.itripid", "rate.itripid","ru.iuserid", "tr.iuserid","tr.idriverid", "tr.iactive", "tr.ehailtrip", "rate.eusertype", "tr.itripid"]

Еще одна проблема, с которой я сталкиваюсь, заключается в том, что выражение "where" неправильно обрабатываетсяэтот парсер. Он не идентифицирован как ключевое слово и из-за этого я не могу извлечь из него информацию однозначно

...