Una extensión de SQLite para validar objetos JSON con esquema JSON. Basado en sqlite-loadable-rs
y jsonschema
crate.
Si su empresa u organización encuentra útil esta biblioteca, ¡considere apoyar mi trabajo!
.load . / jsonschema0
select jsonschema_matches( ' {"maxLength": 5} ' , json_quote( ' alex ' ));
Úselo con las restricciones CHECK
de SQLite para validar columnas JSON antes de insertarlas en una tabla.
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
Encuentre todos los valores en una columna que no coincidan con un esquema JSON.
select
rowid,
jsonschema_matches(
' {
"type": "array",
"items": {
"type": "number"
}
} ' ,
foo
) as valid
from bar
where not valid;
Idioma | Instalar | |
---|---|---|
Pitón | pip install sqlite-jsonschema | |
Conjunto de datos | datasette install datasette-sqlite-jsonschema | |
Nodo.js | npm install sqlite-jsonschema | |
Deno | deno.land/x/sqlite_jsonschema | |
Rubí | gem install sqlite-jsonschema | |
Lanzamiento de Github | ||
Óxido | cargo add sqlite-jsonschema |
sqlite-jsonschema
se distribuye en pip, npm y https://deno.land/x para programadores de Python, Node.js y Deno. También hay extensiones prediseñadas disponibles para usar en otros entornos.
Para desarrolladores de Python, utilice el paquete Python sqlite-jsonschema
:
pip install sqlite-jsonschema
La extensión sqlite-jsonschema
luego se puede cargar en un objeto Connection sqlite3
.
import sqlite3
import sqlite_jsonschema
db = sqlite3 . connect ( ':memory:' )
sqlite_jsonschema . load ( db )
db . execute ( 'select jsonschema_version(), jsonschema()' ). fetchone ()
Consulte Uso de sqlite-jsonschema
con Python para obtener más detalles.
Para los desarrolladores de Node.js, utilice el paquete NPM sqlite-jsonschema
:
npm install sqlite-jsonschema
La extensión sqlite-jsonschema
luego se puede cargar en una conexión better-sqlite3
o 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"
Consulte Uso de sqlite-jsonschema
con Node.js para obtener más detalles.
Para desarrolladores de Deno, utilice el módulo x/sqlite_jsonschema Deno con x/sqlite3
.
import { Database } from "https://deno.land/x/[email protected]/mod.ts" ;
import * as sqlite_jsonschema from "https://deno.land/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 ) ;
Consulte Uso de sqlite-jsonschema
con Deno para obtener más detalles.
Para Datasette, utilice el complemento datasette-sqlite-jsonschema
para incluir funciones sqlite-jsonschema
en sus instancias de Datasette.
datasette install datasette-sqlite-jsonschema
Consulte Uso de sqlite-jsonschema
con Datasette para obtener más detalles.
sqlite3
Para la CLI sqlite3
, descargue una extensión precompilada desde la página de Versiones o compílela usted mismo. Luego use el comando .load
dot.
.load . / jsonschema0
select jsonschema_version();
' v0.2.1 '
Si está utilizando sqlite-jsonschema
de una manera diferente a las enumeradas anteriormente, descargue una extensión precompilada desde la página Lanzamientos y cárguela en su entorno. Descargue el archivo jsonschema0.dylib
(para MacOS), jsonschema0.so
(Linux) o jsonschema0.dll
(Windows) de una versión y cárguelo en su entorno SQLite.
Nota: El
0
en el nombre del archivo (jsonschema0.dylib
/jsonschema0.so
/jsonschema0.dll
) indica la versión principal desqlite-jsonschema
. Actualmente,sqlite-jsonschema
es anterior a la versión 1, por lo que se esperan cambios importantes en versiones futuras.
Lo más probable es que exista algún método llamado "loadExtension" o "load_extension" en la biblioteca cliente SQLite que está utilizando. Alternativamente, como último recurso, utilice la función SQL load_extension()
.
Asegúrese de tener instalado Rust, make y un compilador de C. git clone
este repositorio y ejecuta make loadable-release
.
git clone https://github.com/asg017/sqlite-jsonschema.git
cd sqlite-jsonschema
make loadable-release
Una vez completado, su extensión compilada aparecerá en dist/release/
, ya sea como jsonschema0.so
, jsonschema0.dylib
o jsonschema0.dll
, dependiendo de su sistema operativo.
Consulte la referencia de API completa para cada función SQL sqlite-jsonschema
.
Yo (¿Alex?) dediqué mucho tiempo y energía a este proyecto y a muchos otros proyectos de código abierto. Si su empresa u organización utiliza esta biblioteca (o se siente generoso), considere apoyar mi trabajo o compartir este proyecto con un amigo.
sqlite-xsv
, una extensión de SQLite para trabajar con archivos CSVsqlite-http
, una extensión de SQLite para realizar solicitudes HTTPsqlite-loadable-rs
, un marco para escribir extensiones SQLite en Rust