|
|
1
36
我对这个问题进行了相当广泛的研究。python sqlparse是一个非验证的解析器,这不是您真正需要的。Antlr中的示例需要大量工作才能在Python中转换为一个好的AST。SQL标准语法是 here ,但您自己转换它们将是一项全职工作,而且您可能只需要其中的一个子集,即不需要联接。你可以试试看 gadfly (一个python-sql数据库)也一样,但是我避免了,因为他们使用了自己的解析工具。 对于我的案例,我基本上只需要一个WHERE子句。我试过 booleneo (一个布尔表达式解析器)使用pyparsing编写,但最终从头开始使用pyparsing。MarkRushakoff的reddit文章中的第一个链接给出了一个使用它的SQL示例。 Whoosh 全文搜索引擎也会使用它,但我还没有查看源代码以了解如何使用它。 pyparsing非常容易使用,您可以很容易地将其自定义为与SQL完全不同(您不需要的大多数语法)。我不喜欢ply,因为它使用一些使用命名约定的魔力。 简而言之,让PyParsing尝试一下,它很可能足够强大,能够满足您的需要,并且与Python的简单集成(具有简单的回调和错误处理)将使体验变得非常轻松。 |
|
2
9
This reddit post 建议 Python-sqlparse 作为一个现有的实现,还有一些其他的链接。 |
|
|
3
2
对于我来说,twolaid的python sql解析器工作得很好。它是用C语言写的,需要编译。它是健壮的。它解析出每个子句的各个元素。 https://github.com/TwoLaid/python-sqlparser 我使用它来解析要在报表头中使用的查询列名称。下面是一个例子。
|
|
|
4
1
当然,最好是利用 python-sqlparse on Google Code 更新:现在我看到这是建议-我同意这是值得的: |