Разбор SQL с помощью Python

Здесь много правильных ответов, но я хотел добавить это (для полноты):

Если вы в нижней части файла cpp реализации выполняете явное инстанцирование всех типов, которые будут использоваться шаблоном с, компоновщик сможет найти их как обычно.

Изменить: добавление примера явного создания экземпляра шаблона. Используется после того, как шаблон определен, и определены все функции-члены.

template class vector<int>;

Это создаст экземпляр (и, следовательно, сделает доступным для компоновщика) класс и все его функции-члены (только). Подобный синтаксис работает для функций шаблона, поэтому, если у вас есть перегрузки операторов, не являющихся членами, вам может понадобиться сделать то же самое для них.

Вышеприведенный пример бесполезен, поскольку вектор полностью определен в заголовках, за исключением случаев, когда common include file (precompiled header?) использует extern template class vector<int>, чтобы не создавать его из всех других (1000?) файлов, которые используют вектор.

41
задан codeape 16 August 2012 в 15:42
поделиться

2 ответа

Я довольно подробно изучил этот вопрос. Python-sqlparse - это не проверяющий парсер, который вам не нужен. Примеры в antlr требуют много работы, чтобы преобразовать в хороший ast на python. Стандартные грамматики sql находятся здесь , но преобразовать их самостоятельно, и вполне вероятно, что вам понадобится только подмножество из них, то есть никаких объединений. Вы также можете попробовать посмотреть на gadfly (базу данных sql на Python), но я избегал этого, поскольку они использовали свой собственный инструмент синтаксического анализа.

В моем случае мне по существу требовалось только предложение where. Я попробовал booleneo (синтаксический анализатор логических выражений), написанный с помощью pyparsing, но в итоге использовал pyparsing с нуля. Первая ссылка в сообщении Reddit Марка Рушакова дает пример использования sql. Whoosh система полнотекстового поиска также использует его, но я не смотрел на источник, чтобы понять, как.

Pyparsing очень прост в использовании, и вы можете очень легко настроить его так, чтобы он отличался от sql (большая часть синтаксиса вам не понадобится). Мне не понравился ply, поскольку он использует некоторую магию с использованием соглашений об именах.

Короче говоря, попробуйте pyparsing, он, скорее всего, будет достаточно мощным, чтобы делать то, что вам нужно, и простой интеграцией с python (с простыми обратными вызовами и обработкой ошибок) сделает опыт довольно безболезненным.

Короче говоря, попробуйте pyparsing, он, скорее всего, будет достаточно мощным, чтобы делать то, что вам нужно, а простая интеграция с python (с простыми обратными вызовами и обработкой ошибок) сделает процесс довольно безболезненным.

Короче говоря, попробуйте pyparsing, он, скорее всего, будет достаточно мощным, чтобы делать то, что вам нужно, а простая интеграция с python (с простыми обратными вызовами и обработкой ошибок) сделает процесс довольно безболезненным.

37
ответ дан 26 November 2019 в 23:56
поделиться

В этом сообщении Reddit предлагается Python-sqlparse в качестве существующей реализации, среди пары других ссылок.

10
ответ дан 26 November 2019 в 23:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: