2013-07-03 5 views
3

Я создаю механизм запросов для базы данных, которая извлекает данные из SQL и других источников. Для обычных случаев использования пользователи могут использовать веб-форму, в которой использование может определять параметры фильтрации с помощью входов выбора и диапазона. Но для более сложных случаев использования, я хотел бы указать в поле уравнения фильтрации, где пользователи могут ввестиАнализ и построение фильтрующих запросов, аналогичных предложению SQL WHERE в Python/JavaScript

  • И, ИЛИ

  • Уплотненного скобка

  • имен переменных

  • , <, =,! = Операторы

Так уравнение фильтрации может выглядеть примерно так:

((age > 50) or (weight > 100)) and diabetes='yes' 

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

я видел ранее сообщение о подобной проблеме https://stackoverflow.com/a/1395854/315168

Там, кажется, существует несколько языков и мини-язык парсеров для Python http://navarra.ca/?p=538

Однако, существует ли какой-либо пакет, который бы из коробки решение или близкое решение для моей проблемы? Если бы не самый простой способ построить такой синтаксический анализатор запросов и конструктор в Python?

+0

Это также вариант для синтаксического анализа запроса на стороне клиента, а затем отправки обработанных элементов запроса на сервер через HTTP POST. –

+1

Я думаю, что простая грамматика [EBNF] (https://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_Form) или [PEG] (http://en.wikipedia.org/wiki/Parsing_expression_grammar) для это будет менее 10 строк. Должно быть много вариантов для Python и JS, мне нравится [simpleparse] (http://simpleparse.sourceforge.net/scanning_with_simpleparse.html) для Python. –

+0

Нашли это http://redquerybuilder.appspot.com/ –

ответ