用Python解析SQL

我想在非关系数据存储之上创建一个SQL接口。非关系数据存储,但以关系方式访问数据是有意义的。

我正在研究使用ANTLR来产生一个表示SQL作为关系代数表达式的AST。然后通过评估/走树来返回数据。

我从来没有实现一个解析器,因此我想要一些建议如何最好地实现一个SQL解析器和评估器。

>上述方法听起来是否正确?
>有没有其他工具/图书馆我应该研究?喜欢PLYPyparsing
>指向文章,书籍或源代码,这将帮助我感激。

更新:

我使用pyparsing实现了一个简单的SQL解析器。结合对我的数据存储实现关系操作的Python代码,这是相当简单。

正如我在其中一个意见中所说的,演练的要点是使数据可用于报告引擎。为此,我可能需要实现一个ODBC驱动程序。这可能是很多工作。

我已经深入研究了这个问题。 Python-sqlparse是一个非验证解析器,这不是你真正需要的。 antlr中的示例需要大量的工作才能在python中转换成一个漂亮的ast。 sql标准的翻译是here,但它是一个全职工作,自己转换它们,它可能是你只需要它们的一个子集,即没有连接。你可以尝试查看gadfly(一个python sql数据库),但我避免了,因为他们使用自己的解析工具。

对于我的情况,我只需要一个where子句。我尝试了booleneo(一个布尔表达式解析器)用pyparsing写的,但最终从头开始使用了pyparsing。 Mark Rushakoff的reddit帖子中的第一个链接给出了使用它的sql示例。 Whoosh一个全文本搜索引擎也使用它,但我没有看过源,看看如何。

Pyparsing是非常容易使用,你可以很容易地定制它不完全相同的sql(大多数语法,你不需要)。我不喜欢ply,因为它使用一些魔术使用命名约定。

简而言之,尝试一下,它将很可能是强大到足以做你所需要的,并与python简单的集成(与容易的回调和错误处理)将使体验相当无痛。

http://stackoverflow.com/questions/1394998/parsing-sql-with-python

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:用Python解析SQL