3个版本

0.2.3 2023年8月6日
0.2.3-alpha.62023年6月10日

#1761 in 数据库接口

MIT/Apache

80KB
1K SLoC

TypeScript 659 SLoC // 0.1% comments Python 138 SLoC // 0.1% comments JavaScript 136 SLoC Rust 129 SLoC // 0.0% comments Shell 57 SLoC // 0.1% comments Ruby 13 SLoC

sqlite-jsonschema

一个使用JSON Schema验证JSON对象的SQLite扩展。基于sqlite-loadable-rsjsonschema crate

如果您的公司或组织认为这个库很有用,请考虑支持我的工作

用法

.load ./jsonschema0
select jsonschema_matches('{"maxLength": 5}', json_quote('alex'));

与SQLite的CHECK约束一起使用,在将数据插入表中之前验证JSON列。

create table students(
  -- ensure that JSON objects stored in the data column have "firstName" strings,
  -- "lastName" strings, and "age" integers that are greater than 0.
  data json check (
    jsonschema_matches(
      json('
        {
          "type": "object",
          "properties": {
            "firstName": {
              "type": "string"
            },
            "lastName": {
              "type": "string"
            },
            "age": {
              "type": "integer",
              "minimum": 0
            }
          }
        }
        '),
      data
    )
  )
);

insert into students(data)
  values ('{"firstName": "Alex", "lastName": "Garcia", "age": 100}');
-- ✓


insert into students(data)
  values ('{"firstName": "Alex", "lastName": "Garcia", "age": -1}');
-- Runtime error: CHECK constraint failed: jsonschema_matches

找到所有不符合JSON Schema的列值。

select
  rowid,
  jsonschema_matches(
    '{
      "type": "array",
      "items": {
        "type": "number"
      }
    }',
    foo
  ) as valid
from bar
where not valid;

安装

语言 安装
Python pip install sqlite-jsonschema PyPI
Datasette datasette install datasette-sqlite-jsonschema Datasette
Node.js npm install sqlite-jsonschema npm
Deno deno.land/x/sqlite_jsonschema deno.land/x release
Ruby gem install sqlite-jsonschema Gem
Github发布 GitHub tag (latest SemVer pre-release)
Rust cargoadd sqlite-jsonschema Crates.io

sqlite-jsonschema为Python、Node.js和Deno程序员提供在pip、npm和https://docs.deno.org.cn/x上的分发。还有适用于其他环境的预构建扩展可用。

Python

对于Python开发者,使用sqlite-jsonschema Python包

pip install sqlite-jsonschema

然后可以将sqlite-jsonschema扩展加载到sqlite3连接对象中。

import sqlite3
import sqlite_jsonschema

db = sqlite3.connect(':memory:')
sqlite_jsonschema.load(db)
db.execute('select jsonschema_version(), jsonschema()').fetchone()

有关使用Python的详细信息,请参阅使用sqlite-jsonschema与Python

Node.js

对于Node.js开发者,使用sqlite-jsonschema NPM包

npm install sqlite-jsonschema

然后可以将sqlite-jsonschema扩展加载到better-sqlite3node-sqlite3连接中。

import Database from "better-sqlite3";
import * as sqlite_jsonschema from "sqlite-jsonschema";

const db = new Database(":memory:");

db.loadExtension(sqlite_jsonschema.getLoadablePath());

const version = db.prepare("select jsonschema_version()").pluck().get();
console.log(version); // "v0.2.0"

有关使用Node.js的详细信息,请参阅使用sqlite-jsonschema与Node.js

Deno

对于 Deno 开发者,请使用 x/sqlite_jsonschema Deno 模块,与 x/sqlite3 一起。

import { Database } from "https://docs.deno.org.cn/x/[email protected]/mod.ts";
import * as sqlite_jsonschema from "https://docs.deno.org.cn/x/sqlite_jsonschema/mod.ts";

const db = new Database(":memory:");

db.enableLoadExtension = true;
db.loadExtension(sqlite_jsonschema.getLoadablePath());

const [version] = db
  .prepare("select jsonschema_version()")
  .value<[string]>()!;

console.log(version);

有关详情,请参阅 在 Deno 中使用 sqlite-jsonschema

Datasette

对于 Datasette,请使用 datasette-sqlite-jsonschema 插件,将 sqlite-jsonschema 函数添加到您的 Datasette 实例中。

datasette install datasette-sqlite-jsonschema

有关详情,请参阅 在 Datasette 中使用 sqlite-jsonschema

sqlite3 命令行界面

对于 sqlite3 命令行界面,您可以从发布页面下载预编译的扩展,或者自行编译。然后使用 .load 点命令

.load ./jsonschema0
select jsonschema_version();
'v0.2.1'

作为一个可加载的扩展

如果您以不同于上述方式使用 sqlite-jsonschema,那么请从 发布页面下载预编译的扩展,并将其加载到您的环境中。从发布中下载 jsonschema0.dylib(MacOS),jsonschema0.so(Linux),或 jsonschema0.dll(Windows)文件,并将其加载到您的 SQLite 环境中。

注意: 文件名中的 0(例如 jsonschema0.dylib / jsonschema0.so / jsonschema0.dll)表示 sqlite-jsonschema 的主要版本。目前 sqlite-jsonschema 低于 v1,因此预计未来版本会有破坏性更改。

很可能您的 SQLite 客户端库中存在名为 "loadExtension" 或 "load_extension" 的某种方法。或者,作为最后的手段,请使用 load_extension() SQL 函数

从源代码构建

请确保您已安装 Rust、make 和 C 编译器。然后使用 git clone 此存储库并运行 make loadable-release

git clone https://github.com/asg017/sqlite-jsonschema.git
cd sqlite-jsonschema
make loadable-release

完成后,您的编译扩展将出现在 dist/release/ 下方,文件名可能是 jsonschema0.sojsonschema0.dylibjsonschema0.dll,具体取决于您的操作系统。

文档

请参阅每个 sqlite-jsonschema SQL 函数的完整 API 参考

支持

我(Alex 👋🏼)在这项项目和许多其他开源项目中投入了大量的时间和精力。如果您所在的公司或组织使用此库(或您愿意慷慨解囊),那么请考虑支持我的工作,或者与朋友分享此项目!

另请参阅

依赖项

~19-28MB
~460K SLoC