我正在寻找好的SQL解析器。一个可以使用子选择,非选择查询,CTE,窗口函数和其他合法的SQL元素。
结果将是某种抽象语法树,我以后可以继续使用它。
语言几乎无关紧要,因为我愿意学习新语言只是为了使用该库(如果存在的话)。
我知道从某些开源数据库中提取解析器在技术上是可行的,但这远非易事(至少对于我需要的PostgreSQL解析器而言)。
答案 0 :(得分:2)
Python中有一个无效的SQL解析器:python-sqlparse。令牌作为对象暴露。我怀疑它们是否支持“其他合法的SQL语句”,窗口函数等,尽管这些是由供应商特定的语法控制的,并且没有供应商在技术上完全符合SQL标准。
嗯(知道你愿意学习一门新语言),为什么你需要在语法树上工作?如果你需要一些处理数据库的魔力,可能你不需要重新发明轮子:Python有一个很棒的数据库工具包 - SQL ALchemy。答案 1 :(得分:1)
你可以google“sql parser”。这是列出的:General SQL Parser以下是官方网站上列出的一些突出显示的功能:
这是一个商业SQL库。
答案 2 :(得分:0)
我们的DMS Software Reengineering Toolkit有PL / SQL和ANSI SQL 2011完整解析器(到AST)和prettyprinters(AST返回有效文本)。这些都不是PostGres SQL,但DMS有一种方言机制,通过修改一些语法规则并保留其余部分,可以相对容易地从基础语法中构建方言。从SQL 2011语法中执行此操作似乎是解决问题的实用方法。
DMS还提供了访问/遍历/修改AST的工具,包括程序和表面语法模式和转换。把它想象成“超越解析的生活”。