sqlparse是Python的一个解析SQL语言的库,安装和文档我也不累赘说了,提供一下官网的地址python-sqlparse,在官网给出的github库里面,有一个提取表名的example,挺好用的,大家可以直接使用。
官方的文档比较简单,所以我希望在这篇文章里面补充一些信息,帮助大家理解文档和使用这个工具包。
sqlparse有几个最简单的工具:split,format,parse,分别是提取sql单个语句、格式化sql的语句以及解析sql,这几个函数官网和其他文章都有大量的例子,也就不再介绍。
先给出这篇文章使用的sql例子:
CREATE TABLE TABLE_TO_CREATE NOLOGGING AS
SELECT DISTINCT
A.COLA,
B.COLB,
DECODE(A.DECODE_CONDITION, 1, '是', '否') DECODED,
ROW_NUMBER() OVER(PARTITION BY A.CLASS_CONDITION ORDER BY A.RAND_CONDITION DESC) RN
FROM FSCRM.TABLE_A A,
(SELECT * FROM TABLE_C C WHERE C.SOMETHING='SOMETHING' AND C.NUM=1234) B
WHERE A.COMPARE_CONDITION=B.COMPARE_CONDITION
AND A.NUM NOT IN (1, 2, 3)
AND NOT EXISTS (SELECT D.COLD FROM TABLE_D WHERE A.COLA=D.COLD)
ORDER BY A.ORDER_CONDITION
/* COMMENTS */
;
了解过sqlparse的人都知道,使用parse后,sql语句被解析成一棵树。这棵树跟常见的树不一样,因为它的父节点,是完全包含了子节点的信息。例如在上面的例子:
In [1]: import sqlparse
In [2]: with open('sample.sql', 'r', encoding='utf8') as sql_file:
...: file_parse = sqlparse.parse(sql_file.read().strip())
...:
In [3]: file_parse
Out[3]: (<Statement 'CREATE...' at 0x49E6CF0>,)
In [4]: for token in file_parse[0].tokens:
...: print(type(token), token.ttype, token.value)
...:
<class 'sqlparse.sql.Token'> Token.Keyword.DDL CREATE
<class 'sqlparse.sql.Token'> Token.Text.Whitespace
<class 'sqlparse.sql.Token'> Token.Keyword TABLE
<class 'sqlparse.sql.Token'> Token.Text.Whitespace
<class 'sqlparse.sql.Identifier'> None TABLE_TO_CREATE NOLOGGING
<class 'sqlparse.


748

被折叠的 条评论
为什么被折叠?



