PostgreSQL语言AST和语句美化器

pglast的Python项目详细描述


简介

在较低的层次上,模块公开两个libpg_查询函数, parse_sql() parse_plpgsql() ,分别接受一个 sql 语句和一个 plpgsql 语句 并返回一个 解析树 作为python字典、列表和标量值的层次结构。在 有些情况下,这些标量对应于一些c typedef枚举,这些枚举是自动的 从上面提到的postgresql头中提取,并作为 pglast.enums 提供。

在更高的层次上,树由三个python类表示,一个表示 一个单独的节点,a 列表 包装一系列节点,a 标量 用于简单值,例如 a 字符串 整数 布尔值

每个节点都由一个 标记来标识,该标记是一个字符串标签,用于描述其内容,即 显示为一组 属性以及字典式接口(技术上是 实现一个 \uu getattr\uu 方法和一个 \uu getitem\uu 方法)。当被要求 属性,该节点返回基类的一个实例,即另一个 节点或 list 或a scalar ,具体取决于该项的数据类型。当节点没有 包含请求的属性,它返回一个丢失的标记实例。

a list 包装一个普通的python list 并可能包含一系列节点实例,或者 在某些情况下,可以使用常用语法访问或迭代的其他子列表。

最后,a 标量 携带某种类型的单个值,可通过其 值访问。 属性。

除此之外,模块还实现了两个序列化,一个将 节点 转换为 raw 文本表示法和另一种返回经过美化的表示法的表示法。后者 由 pgpp cli工具公开,请参见下面的示例。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
amazon web services Java AWS s3:如何使用Md5预签名url设置和上载内容   twitter使用java从推文中排除一些单词   如何在GUI java中添加延迟时间   java程序,如何使用Outputstream发送两次消息   java为什么是javax。在将Yasson与JSONB一起使用时,Glassfish中的json需要作为依赖项吗?   如何从dist文件夹中读取文件   java如何获取与模式匹配的文件列表   java如何使用Intent从Android应用程序发送彩信?   java限制对Spring的依赖,同时又不丧失框架的功能   java是否将捕获异常报告给Firebase/Fabric等?   用jdbcjava实现mysql分页   给定URI的java注释检索   java是序列化/反序列化公共枚举的简单方法?   java如何使用jMockit模拟本机方法