当前位置: 首页 > 面试题库 >

使用Python解析SQL

谯嘉木
2023-03-14
问题内容

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

我正在研究使用ANTLR生成将SQL表示为关系代数表达式的AST。然后通过评估/遍历树来返回数据。

我以前从未实现过解析器,因此我想就如何最好地实现SQL解析器和评估器提供一些建议。

  • 上述方法听起来是否正确?
  • 还有其他我应该研究的工具/库吗?就像PLY或Pyparsing一样。
  • 指向对我有帮助的文章,书籍或源代码的指针,我们深表感谢。

更新:

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

正如我在评论中说的那样,此练习的目的是使数据可用于报告引擎。为此,我可能需要实现一个ODBC驱动程序。这可能是很多工作。


问题答案:

我已经对这个问题进行了广泛的研究。Python-
sqlparse是一个非验证解析器,实际上并不是您所需要的。antlr中的示例需要大量工作才能在python中转换为不错的ast。sql标准语法在这里,但是您自己转换它们将是一项全职工作,并且很可能只需要它们的一个子集,即无需联接。您也可以尝试查看gadfly(一个python
sql数据库),但是由于他们使用了自己的解析工具,因此我避免了它。

就我而言,我基本上只需要一个where子句。我尝试了用pyparsing编写的booleneo(布尔表达式解析器),但最终还是从头开始使用pyparsing。Mark
Rushakoff的reddit帖子中的第一个链接提供了一个使用它的SQL示例。Whoosh全文搜索引擎也使用它,但是我没有查看源代码来了解如何使用。

Pyparsing非常易于使用,您可以非常容易地对其进行自定义,使其与sql不完全相同(不需要使用大多数语法)。我不喜欢ply,因为它使用了一些使用命名约定的魔术。

简而言之,请尝试一下pyparsing,它很可能足够强大,可以满足您的需求,并且与python的简单集成(具有轻松的回调和错误处理)将使您的使用起来非常轻松。



 类似资料:
  • 我想使用Python创建一个函数来获取网站内容,例如获取网站组织内容。 在代码中,组织是东京大学: 我如何能直接获得网站内容,而不需要任何新的安装,如获得http://www.ip-adress.com/ip_tracer/157.123.22.11

  • 我正在使用python中的twython库转储我自己的公共推文。数据以json格式下载,请参阅:https://api.twitter.com/1.1/statuses/home_timeline.json 如何逐行打印所有数据,如

  • 问题内容: 我正在尝试解析json对象并遇到问题。 我可以弄清楚如何获得这些值。我可以拿钥匙。请帮忙。 问题答案: 您不再拥有JSON对象,而拥有Python 字典 。遍历字典将产生其密钥。 如果要访问这些值,请为原始词典建立索引或使用返回不同内容的方法之一。

  • 问题内容: 环顾四周,找不到满意的答案。有谁知道如何使用Python从Outlook解析.msg文件? 我试过使用mimetools和email.parser,但没有运气。帮助将不胜感激! 问题答案: 这对我有用:

  • 本文向大家介绍python OpenCV GrabCut使用实例解析,包括了python OpenCV GrabCut使用实例解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了python OpenCV GrabCut使用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 先上一个效果图: 使用Python3.7+OpenCV

  • 问题内容: 我正在编写一个Python脚本来处理Procmail返回的电子邮件。如该问题中所建议,我正在使用以下Procmail配置: 我的process_mail.py脚本正在通过stdin接收电子邮件,如下所示: 我正在尝试以这种方式解析消息: 我想获取诸如“发件人”,“收件人”和“主题”之类的消息字段。但是,消息对象不包含任何这些字段。 我究竟做错了什么? 问题答案: 您必须确保这些行不会意