如何用Python的sqlparse来分析SQL

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.
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值