SQL 格式化/ MySQL · PostgreSQL
一键美化或压缩 SQL 语句,支持 MySQL、PostgreSQL 及通用 SQL 语法。
这个工具有帮到你吗?
代码示例
Python (sqlparse)
import sqlparse
sql = "select id,name from users where active=1"
# Format / beautify
formatted = sqlparse.format(
sql,
reindent=True,
keyword_case='upper',
identifier_case='lower',
strip_comments=False,
indent_width=2,
)
print(formatted)
# SELECT id, name
# FROM users
# WHERE active = 1
# Minify
minified = sqlparse.format(
sql,
strip_whitespace=True,
keyword_case='upper',
)Node.js (sql-formatter)
import { format } from 'sql-formatter';
const sql = `select id,name,email
from users where status='active'`;
// Format for MySQL
const formatted = format(sql, {
language: 'mysql',
tabWidth: 2,
keywordCase: 'upper',
linesBetweenQueries: 2,
});
// Format for PostgreSQL
const pgFormatted = format(sql, {
language: 'postgresql',
tabWidth: 2,
keywordCase: 'upper',
});
console.log(formatted);
// SELECT
// id,
// name,
// email
// FROM users
// WHERE status = 'active'CLI (pgFormatter)
# Install pgFormatter (Perl) # https://github.com/darold/pgFormatter cpanm pgFormatter # Format a file pg_format query.sql -o formatted.sql # Format from stdin echo "select * from users" | pg_format # Options pg_format query.sql --spaces 2 --keyword-case 1 --function-case 2 # Using prettier-plugin-sql (Node) npx prettier --plugin prettier-plugin-sql --parser sql query.sql
Go
package main
import (
"fmt"
"strings"
"unicode"
)
// Simple SQL keyword uppercaser
func formatSQL(sql string) string {
keywords := []string{
"SELECT", "FROM", "WHERE",
"JOIN", "LEFT JOIN", "INNER JOIN",
"GROUP BY", "ORDER BY", "HAVING",
"INSERT INTO", "VALUES", "UPDATE",
"SET", "DELETE FROM", "LIMIT",
}
result := sql
for _, kw := range keywords {
lower := strings.ToLower(kw)
result = strings.ReplaceAll(
result, lower,
"\n"+kw,
)
}
return strings.TrimSpace(result)
}
// For production use, consider:
// github.com/xwb1989/sqlparser (MySQL)
// github.com/pganalyze/pg_query_go (PostgreSQL)
func main() {
sql := "select id from users where id=1"
fmt.Println(formatSQL(sql))
}常见问题
什么是 SQL 格式化/美化?
SQL 格式化(美化)将紧凑或书写不一致的 SQL 查询转换为可读、缩进一致的形式。它会在主要子句(SELECT、FROM、WHERE、JOIN 等)前添加换行符,并将关键字转为大写。格式化不改变查询的执行逻辑,只影响可读性。
支持 MySQL 和 PostgreSQL 语法吗?
格式化器处理 MySQL、PostgreSQL 及大多数关系型数据库共用的 SQL 语法。PostgreSQL 的 :: 类型转换运算符、MySQL 的反引号标识符等方言特有语法也能正确 tokenize。选择对应方言以标注你使用的语法规范。
SQL 压缩有什么用途?
压缩模式会移除所有多余空白和注释,生成最紧凑的查询格式。适合将 SQL 嵌入代码字符串、通过日志传输 SQL 或减少查询日志冗余。压缩后的 SQL 与格式化版本功能完全相同。
如何在命令行格式化 SQL?
PostgreSQL 可使用 pg_format(Perl)。MySQL 可使用 Python 的 mysqlformat 包。也可用 Python 的 sqlparse:import sqlparse; sqlparse.format(sql, reindent=True, keyword_case='upper')。详见下方代码示例。
为什么压缩后注释被删除了?
压缩模式会故意移除 SQL 注释(-- 单行注释和 /* 块注释 */)以减小体积。如需保留注释,请使用格式化模式,注释会按正确的缩进级别保留。
格式化器能处理 CTE(WITH 子句)吗?
可以。WITH ... AS (...) 公共表表达式可以被识别,WITH 关键字会触发新块的开始。CTE 内部的嵌套 SELECT 语句也会被适当缩进。