3个版本
0.2.3 | 2023年8月6日 |
---|---|
0.2.3-alpha.6 | 2023年6月10日 |
#1761 in 数据库接口
80KB
1K SLoC
sqlite-jsonschema
一个使用JSON Schema验证JSON对象的SQLite扩展。基于sqlite-loadable-rs
和jsonschema
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 |
|
Datasette | datasette install datasette-sqlite-jsonschema |
|
Node.js | npm install sqlite-jsonschema |
|
Deno | deno.land/x/sqlite_jsonschema |
|
Ruby | gem install sqlite-jsonschema |
|
Github发布 | ||
Rust | cargoadd sqlite-jsonschema |
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-sqlite3
或node-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.so
、jsonschema0.dylib
或 jsonschema0.dll
,具体取决于您的操作系统。
文档
请参阅每个 sqlite-jsonschema
SQL 函数的完整 API 参考。
支持
我(Alex 👋🏼)在这项项目和许多其他开源项目中投入了大量的时间和精力。如果您所在的公司或组织使用此库(或您愿意慷慨解囊),那么请考虑支持我的工作,或者与朋友分享此项目!
另请参阅
sqlite-xsv
,用于处理 CSV 的 SQLite 扩展sqlite-http
,用于发送HTTP请求的SQLite扩展sqlite-loadable-rs
,用于在Rust中编写SQLite扩展的框架
依赖项
~19-28MB
~460K SLoC