【发布时间】:2023-03-21 21:52:01
【问题描述】:
我正在为从 SQL 和其他来源提取数据的数据库构建查询引擎。对于正常用例,用户可以使用 Web 表单,用户可以使用选择和范围输入指定过滤参数。但是对于高级用例,我想指定一个过滤方程框,用户可以在其中输入
与、或
嵌套括号
变量名
、
所以过滤方程可能类似于:
((age > 50) or (weight > 100)) and diabetes='yes'
然后将解析此输入,检测输入错误(不存在的变量名称等)并基于它构建 SQL Alchemy 查询。
我之前看过一篇关于类似问题的帖子https://stackoverflow.com/a/1395854/315168
似乎存在多种 Python 语言和迷你语言解析器 http://navarra.ca/?p=538
但是,是否存在针对我的问题的开箱即用解决方案或接近解决方案的任何软件包?如果不是,那么在 Python 中构造此类查询解析器和构造函数的最简单方法是什么?
【问题讨论】:
-
也可以选择在客户端解析查询,然后通过 HTTP POST 将解析的查询元素发布到服务器。
-
我猜一个简单的 EBNF 或 PEG 语法将在 10 行以下。 Python和JS应该有很多选择,我喜欢Python的simpleparse。
-
如果您找到解决方案,您可以发布答案。
标签: javascript python sqlalchemy bnf