sqlparse.split(sql, encoding=None)

1
2
3
4
5
6
7
8
def split(sql, encoding=None):
"""
将一个由多条 SQL 拼接的字符串切分成多条 SQL

:param sql: 包含一个或多个 SQL 语句的字符串
:param encoding: SQL 的字符集
:returns: 返回一个包含被切分好的 SQL 语句 List
"""

sqlparse.format(sql, encoding=None, **options)

1
2
3
4
5
6
7
8
def format(sql, encoding=None, **options):
"""
根据 option 配置调整 sql 格式

除了格式化选项之外,该函数还通过 encoding 配置决定了语句的编码。

:returns: 返回一个格式化完成的 SQL
"""

keyword_case

用于设置 SQL 关键字 的格式:

  • keyword_case="upper":关键字大写
  • keyword_case="lower":关键字小写
  • keyword_case="capitalize":关键字首字母大写

identifier_case

用于设置 SQL 其他标识符的格式(表名,字段名等)

  • keyword_case="upper":关键字大写
  • keyword_case="lower":关键字小写
  • keyword_case="capitalize":关键字首字母大写

这个参数不建议使用,会改变字段名,可能会造成 SQL 语法错误

strip_comments

设置为 True 则删除 SQL 中的注释;

不会造成 SQL 语法错误

truncate_strings

值类型为整型,设置传的值的长度,举个例子:

1
2
3
4
5
6
7
select *
from foo
where id in (
select id
from bar
where name = 'aabbb'
);

如果设置为 2,这则后面的 name = 'aabbb' 最后的 bbb 就会被截取掉

不建议使用

truncate_char

如果长字符串被截断,则将被截断的字符串添加到截断的字符串

没搞懂啥意思,也不建议使用

reindent

设置为 True,会修改 SQL 的缩进

reindent_aligned

如果为 True,则改变语句的缩进,语句按关键字对齐

以上两个配置可以不用添加,不会造成 SQL 语法错误

use_space_around_operators

如果设置为 True,则为操作符左右添加空格(>,<,= 等操作符)

1
2
3
4
5
6
7
select *
from foo
where id in (
select id
from bar
where name='aabbb'
);

变为

1
2
3
4
5
6
7
select *
from foo
where id in (
select id
from bar
where name = 'aabbb'
);

不会造成 SQL 语法错误

indent_tabs

默认为 False,如果设置为 True,则缩进改为制表符而不是空格;

不会造成 SQL 语法错误

indent_width

设置缩进宽度,为数值类型

不会造成 SQL 语法错误

wrap_after

没搞懂啥意思

output_format

按照指定的编程语言输出(目前只支持 python 和 php)

不会造成 SQL 语法错误,但是感觉好鸡肋的功能

comma_first

设置为 True,则会将逗号放到列名前(个人比较喜欢这个格式)

不会造成 SQL 语法错误

sqlparse.parse(sql, encoding=None)

1
2
3
4
5
6
7
8
def parse(sql, encoding=None):
"""
解析 SQL 并返回语句解析结果 List

:param sql: 包含一个或多个 SQL 语句的字符串
:param encoding: SQL 的字符集
:returns: 返回一个 sqlparse.sql.Statement 实例元组
"""