我已经对这个问题进行了广泛的研究。Python-
sqlparse是一个非验证解析器,实际上并不是您所需要的。antlr中的示例需要大量工作才能在python中转换为不错的ast。sql标准语法在这里,但是您自己转换它们将是一项全职工作,并且很可能只需要它们的一个子集,即无需联接。您也可以尝试查看gadfly(一个python
sql数据库),但是由于他们使用了自己的解析工具,因此我避免了它。
就我而言,我基本上只需要一个where子句。我尝试了用pyparsing编写的booleneo(布尔表达式解析器),但最终还是从头开始使用pyparsing。Mark
Rushakoff的reddit帖子中的第一个链接提供了一个使用它的SQL示例。Whoosh全文搜索引擎也使用它,但是我没有查看源代码来了解如何使用。
Pyparsing非常易于使用,您可以非常容易地对其进行自定义,使其与sql不完全相同(不需要使用大多数语法)。我不喜欢ply,因为它使用了一些使用命名约定的魔术。
简而言之,请尝试一下pyparsing,它很可能足够强大,可以满足您的需求,并且与python的简单集成(具有轻松的回调和错误处理)将使您的使用起来非常轻松。



