在Python / JavaScript中解析和构造类似于SQL WHERE子句的过滤查询

Mik*_*maa 5 javascript python sqlalchemy bnf

我正在为从SQL和其他来源提取数据的数据库构建查询引擎。对于正常使用情况,用户可以使用Web表单,用户可以在其中使用select和range输入指定过滤参数。但是对于高级用例,我想指定一个过滤方程式框,用户可以在其中键入

  • 与,或

  • 嵌套括号

  • 变量名

  • ,<,=,!=运算符

因此,过滤方程可能类似于:

 ((age > 50) or (weight > 100)) and diabetes='yes'
Run Code Online (Sandbox Code Playgroud)

然后,将解析此输入,检测到输入错误(不存在的变量名,等等),并基于此构建SQL Alchemy查询。

我看到了有关类似问题的早期帖子/sf/answers/97709811/

似乎有几种适用于Python的语言和迷你语言解析器http://navarra.ca/?p=538

但是,是否存在针对我的问题开箱即用的解决方案或接近解决方案的软件包?如果不是,用Python构造这种查询解析器和构造函数的最简单方法是什么?

小智 1

看看https://github.com/dfilatov/jspath

它与 xpath 类似,因此语法不像 SQL 那样熟悉,但它对于分层数据来说功能强大。