【问题标题】:How to use sqlparse to parse sql statements如何使用sqlparse解析sql语句
【发布时间】:2021-06-03 19:16:57
【问题描述】:

我正在尝试解析用户(在一段时间内)在 PostgreSQL 数据库中执行的所有查询(通过查询 pg_stat_statements 表)并尝试创建用户使用哪些表运行的报告>选择或插入删除查询。基本上运行 Select query, queryid, userid from pg_stat_state 之类的东西,然后解析每个查询以检查它是 Select 还是 InsertDelete 查询并提取查询中的 table_Name。

我正在使用 sqlparse python 模块,但对它很陌生,所以需要帮助。 我可以通过以下方式获取表名:

import sqlparse
from sqlparse.sql import Where, Comparison, Parenthesis, Identifier

for tokens in sqlparse.parse(sql_statement)[0]:
    if isinstance(tokens, Identifier):
        print(str(tokens))

但不确定如何获取语句类型(选择/插入/删除)以及表名。此外,还需要将 COPY 语句合并为 Selects。

我尝试使用 psqlparse,但在网上没有看到太多关于此模块的信息/帮助。

请提出建议。

谢谢。

【问题讨论】:

    标签: python python-3.x postgresql sql-parser


    【解决方案1】:

    这不是微不足道的,我不认为 sqlparse 真的很有帮助。 INSERT 和 DELETE 非常简单,因为它们通常从“INSERT INTO table”和“DELETE FROM table”开始,但“SELECT”是狂野的西部。显然,这些表将在 FROM 子句中提及,但它可以是“FROM table1 t1, table t2, table t3 WHERE”或“FROM table t1 LEFT INNER JOIN table t2 LEFT INNER JOIN table t3 WHERE”。 您可能有嵌套查询,而 SELECT 甚至不必有一个表。另外,可能会有 UNION 提到更多的表。当然,“SELECT INTO”只是“INSERT”的另一种方式。我相信你应该从做文本处理开始,寻找关键词。你可能已经够远了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      相关资源
      最近更新 更多