Une extension SQLite pour valider les objets JSON avec le schéma JSON. Basé sur sqlite-loadable-rs
et la caisse jsonschema
.
Si votre entreprise ou organisation trouve cette bibliothèque utile, pensez à soutenir mon travail !
.load . / jsonschema0
select jsonschema_matches( ' {"maxLength": 5} ' , json_quote( ' alex ' ));
À utiliser avec les contraintes CHECK
de SQLite pour valider les colonnes JSON avant de les insérer dans une table.
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
Recherchez toutes les valeurs d'une colonne qui ne correspondent pas à un schéma JSON.
select
rowid,
jsonschema_matches(
' {
"type": "array",
"items": {
"type": "number"
}
} ' ,
foo
) as valid
from bar
where not valid;
Langue | Installer | |
---|---|---|
Python | pip install sqlite-jsonschema | |
Ensemble de données | datasette install datasette-sqlite-jsonschema | |
Noeud.js | npm install sqlite-jsonschema | |
Déno | deno.land/x/sqlite_jsonschema | |
Rubis | gem install sqlite-jsonschema | |
Version GitHub | ||
Rouiller | cargo add sqlite-jsonschema |
sqlite-jsonschema
est distribué sur pip, npm et https://deno.land/x pour les programmeurs Python, Node.js et Deno. Il existe également des extensions prédéfinies disponibles pour une utilisation dans d'autres environnements.
Pour les développeurs Python, utilisez le package Python sqlite-jsonschema
:
pip install sqlite-jsonschema
L'extension sqlite-jsonschema
peut ensuite être chargée dans un objet Connection sqlite3
.
import sqlite3
import sqlite_jsonschema
db = sqlite3 . connect ( ':memory:' )
sqlite_jsonschema . load ( db )
db . execute ( 'select jsonschema_version(), jsonschema()' ). fetchone ()
Voir Utilisation sqlite-jsonschema
avec Python pour plus de détails.
Pour les développeurs Node.js, utilisez le package NPM sqlite-jsonschema
:
npm install sqlite-jsonschema
L'extension sqlite-jsonschema
peut ensuite être chargée dans une connexion better-sqlite3
ou 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"
Voir Utilisation de sqlite-jsonschema
avec Node.js pour plus de détails.
Pour les développeurs Deno, utilisez le module x/sqlite_jsonschema Deno avec 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 ) ;
Voir Utilisation sqlite-jsonschema
avec Deno pour plus de détails.
Pour Datasette, utilisez le plugin datasette-sqlite-jsonschema
pour inclure les fonctions sqlite-jsonschema
à vos instances Datasette.
datasette install datasette-sqlite-jsonschema
Voir Utilisation sqlite-jsonschema
avec Datasette pour plus de détails.
sqlite3
Pour la CLI sqlite3
, téléchargez une extension précompilée à partir de la page Releases ou créez-la vous-même. Utilisez ensuite la commande .load
dot.
.load . / jsonschema0
select jsonschema_version();
' v0.2.1 '
Si vous utilisez sqlite-jsonschema
d'une manière différente de celles répertoriées ci-dessus, téléchargez une extension précompilée à partir de la page Releases et chargez-la dans votre environnement. Téléchargez le fichier jsonschema0.dylib
(pour MacOS), jsonschema0.so
(Linux) ou jsonschema0.dll
(Windows) à partir d'une version et chargez-le dans votre environnement SQLite.
Remarque : Le
0
dans le nom de fichier (jsonschema0.dylib
/jsonschema0.so
/jsonschema0.dll
) indique la version majeure desqlite-jsonschema
. Actuellement,sqlite-jsonschema
est antérieur à la v1, alors attendez-vous à des changements importants dans les versions futures.
Il y a de fortes chances qu'il existe une méthode appelée "loadExtension" ou "load_extension" dans la bibliothèque client SQLite que vous utilisez. Vous pouvez également, en dernier recours, utiliser la fonction SQL load_extension()
.
Assurez-vous que Rust, Make et un compilateur C sont installés. Ensuite, git clone
ce référentiel et exécutez make loadable-release
.
git clone https://github.com/asg017/sqlite-jsonschema.git
cd sqlite-jsonschema
make loadable-release
Une fois terminée, votre extension compilée apparaîtra sous dist/release/
, soit sous le nom jsonschema0.so
, jsonschema0.dylib
ou jsonschema0.dll
, selon votre système d'exploitation.
Consultez la référence API complète pour chaque fonction SQL sqlite-jsonschema
.
J'ai (Alex ?) consacré beaucoup de temps et d'énergie sur ce projet et sur de nombreux autres projets open source. Si votre entreprise ou organisation utilise cette bibliothèque (ou si vous vous sentez généreux), alors pensez à soutenir mon travail ou partagez ce projet avec un ami !
sqlite-xsv
, Une extension SQLite pour travailler avec des CSVsqlite-http
, Une extension SQLite pour faire des requêtes HTTPsqlite-loadable-rs
, Un framework pour écrire des extensions SQLite dans Rust