52

有谁知道一个程序、实用程序或一些程序库,最好是用于 Linux,它采用未格式化的 SQL 字符串并漂亮地打印出来?

例如我想要以下

select * from users where name = 'Paul'

改成这样

select * 
from users
where
   name = 'Paul'

确切的格式并不重要。我只需要一些东西来获取一个大的 SQL 字符串并将其分解成更易读的东西。

4

2 回答 2

75

尝试 sqlparse 模块的 sqlformat

查看sqlparse。它是一个安装命令的 Python 模块sqlformat。用法很简单,例如:

sqlformat --reindent --keywords upper --identifiers lower my_file.sql

我尝试了上述 CLI 替代方案,但是:

  • sqlinform出来了,因为我想要一个开源 CLI 应用程序。
  • fsqlf只有很少的功能(create view例如缺少)。

感谢sqlformat我什至了解到“REF”是SQL:2011 和 SQL:2008 中的保留关键字

于 2014-11-20T23:40:22.983 回答
14

试试 fsqlf

fsqlf ( http://sourceforge.net/projects/fsqlf/ ) 是一个命令行或 GUI 程序,开源,用于格式化 SQL。它支持有一个formatting.conf 文件,它可以让您在最终产品的外观方面有很大的灵活性。

示例 1:

☺  [wwalker@speedy:~] 
$ echo "select f1, f2, fname, lName from tblName where f1 = true and fname is not null order by lName asc" | fsqlf 

SELECT
  f1
, f2
, fname
, lName
FROM tblName
WHERE f1=true
AND fname is not null
ORDER BY lName asc

示例 2:

☺  [wwalker@speedy:~] 
$ vim formatting.conf # 2 character change

☺  [wwalker@speedy:~] 
$ echo "select f1, f2, fname, lName from tblName where f1 = true and fname is not null order by lName asc" | fsqlf 

SELECT
 f1 ,
 f2 ,
 fname ,
 lName
FROM tblName
WHERE f1=true
AND fname is not null
ORDER BY lName asc

示例 3:

☺  [wwalker@speedy:~] 
$ vim formatting.conf # 1 character change

☺  [wwalker@speedy:~] 
$ echo "select f1, f2, fname, lName from tblName where f1 = true and fname is not null order by lName asc" | fsqlf 

SELECT
 f1 , f2 , fname , lName
FROM tblName
WHERE f1=true
AND fname is not null
ORDER BY lName asc
于 2013-08-19T20:49:56.807 回答