可扩展的linter for sql

squabble的Python项目详细描述


build statusDocumentation StatusPyPI version

捕获不安全的SQL迁移。

$ squabble sql/migration.sql
sql/migration.sql:4:46 ERROR: column "uh_oh" has a disallowed constraint [1004]
ALTER TABLE big_table ADD COLUMN uh_oh integer DEFAULT 0;
                                               ^
# Use --explain to get more information on a lint violation
$ squabble --explain 1004ConstraintNotAllowed
     When adding a column to an existing table, certain constraints can have
     unintentional side effects, like locking the table or introducing
     performance issues.
     ...

口角也可以是integrated with your editor来捕捉 SQL文件。

$echo'SELECT * FROM WHERE x = y;'| squabble --reporter=plain
stdin:1:15 CRITICAL: syntax error at or near "WHERE"

目前,大多数规则都集中在postgres和它的 怪癖。但是,争吵可以解析任何ansi sql和 具体到其他数据库都很感激!

安装

$ pip3 install squabble
$ squabble --help

注意

只有Python3.5+才支持争吵

如果要从源安装:

$ git clone https://github.com/erik/squabble.git &&cd squabble
$ python3 -m venv ve &&source ve/bin/activate
$ python setup.py install
$ squabble --help

配置

要查看规则列表,请尝试

$ squabble --list-rules

然后,显示有关规则的详细信息(如基本原理 和配置选项)

$ squabble --show-rule AddColumnsDisallowConstraints

一旦配置文件就位,就可以显式地将其传递到 命令行,或自动查找。

$ squabble -c path/to/config ...

如果在命令行中没有明确给出,那么crabble将查找 名为.squabblerc的文件位于以下位置(按顺序):

  • ./.squabblerc
  • (git_repo_root)/.squabblerc
  • ~/.squabblerc

每个文件配置

还可以使用SQL行注释在文件级应用配置 以-- enable:RuleName-- disable:RuleName的形式。

例如,要对一个文件禁用RuleA并启用RuleB, 这可以做到:

-- disable:RuleA
-- enable:RuleB config=value array=1,2,3
SELECTemailFROMusersWHERE...;

示例配置

{"reporter":"color","plugins":["/some/directory/with/custom/rules"],"rules":{"AddColumnsDisallowConstraints":{"disallowed":["DEFAULT","FOREIGN","NOT NULL"]}}}

现有技术

squabble当然不是这个领域的第一个工具。如果它 不符合您的需要,请考虑以下工具之一:

  • sqlcheck-常规 基于表达式(而不是解析),更关注SELECT 声明多于迁移。
  • sqlint-检查 文件的语法有效。使用与 争吵。
  • sqlfluff- 更注重风格和格式,似乎仍在 进步。

致谢

如果没有:

  • libpg_query-邮政 查询分析器
  • pglast-python绑定到 libpg_查询
  • 博士后-…显然

使用的logo image 在文档中是由gianni-dolce merda从名词 项目

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
分析线程“main”java中的异常。时间总体安排DateTimeParseException:未能在索引0处分析文本“”   java为什么术语“工作单元”如此重要,为什么JDBC自动提交违反了这种模式?   java您的SQL语法有错误,但查询在MySQL工作台中运行   如何将api post请求从Java写入c#   java集成Hbase和Hive的优势是什么   使用Ecplise从数据库检索列表时遇到问题的java   java使用Guice需要做什么?   java在控制器中使用@Autowired和@Qualifier更改服务的数据源   通过Java API将具有值的字段添加到MongoDB中的现有文档中   java设置了JFrame背景,为什么这不起作用?   java和安卓中的异常处理   java如何在glassfish服务器中配置oracle精简连接池?   java如何使用spring@Lookup注释?   java Log4J调试不起作用?   java有没有人有一个好的代码示例/库,可以通过S3预签名的URL执行大文件(5GB)PUT操作?   java如何避免“除非模拟类型是可注入的或动态的,否则无法进入方法”?   浮点Java IEEE 754浮点到IBM浮点字节[4]转换