Eine SQLite-Erweiterung zum Validieren von JSON-Objekten mit JSON-Schema. Basierend auf sqlite-loadable-rs
und der jsonschema
Kiste.
Wenn Ihr Unternehmen oder Ihre Organisation diese Bibliothek nützlich findet, denken Sie darüber nach, meine Arbeit zu unterstützen!
.load . / jsonschema0
select jsonschema_matches( ' {"maxLength": 5} ' , json_quote( ' alex ' ));
Verwenden Sie es mit CHECK
Einschränkungen von SQLite, um JSON-Spalten vor dem Einfügen in eine Tabelle zu validieren.
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
Suchen Sie alle Werte in einer Spalte, die keinem JSON-Schema entsprechen.
select
rowid,
jsonschema_matches(
' {
"type": "array",
"items": {
"type": "number"
}
} ' ,
foo
) as valid
from bar
where not valid;
Sprache | Installieren | |
---|---|---|
Python | pip install sqlite-jsonschema | |
Datensatz | datasette install datasette-sqlite-jsonschema | |
Node.js | npm install sqlite-jsonschema | |
Deno | deno.land/x/sqlite_jsonschema | |
Rubin | gem install sqlite-jsonschema | |
Github-Veröffentlichung | ||
Rost | cargo add sqlite-jsonschema |
sqlite-jsonschema
wird auf pip, npm und https://deno.land/x für Python-, Node.js- und Deno-Programmierer verteilt. Es stehen auch vorgefertigte Erweiterungen zur Verwendung in anderen Umgebungen zur Verfügung.
Für Python-Entwickler verwenden Sie das Python-Paket sqlite-jsonschema
:
pip install sqlite-jsonschema
Die sqlite-jsonschema
Erweiterung kann dann in ein sqlite3
Verbindungsobjekt geladen werden.
import sqlite3
import sqlite_jsonschema
db = sqlite3 . connect ( ':memory:' )
sqlite_jsonschema . load ( db )
db . execute ( 'select jsonschema_version(), jsonschema()' ). fetchone ()
Weitere Informationen finden Sie unter „Verwenden von sqlite-jsonschema
mit Python“ .
Für Node.js-Entwickler verwenden Sie das NPM-Paket sqlite-jsonschema
:
npm install sqlite-jsonschema
Die sqlite-jsonschema
Erweiterung kann dann in eine better-sqlite3
oder node-sqlite3
-Verbindung geladen werden.
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"
Weitere Informationen finden Sie unter „Verwenden von sqlite-jsonschema
mit Node.js“ .
Für Deno-Entwickler verwenden Sie das Deno-Modul x/sqlite_jsonschema mit 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 ) ;
Weitere Informationen finden Sie unter „Verwenden von sqlite-jsonschema
mit Deno“ .
Verwenden Sie für Datasette das Plugin datasette-sqlite-jsonschema
um sqlite-jsonschema
Funktionen in Ihre Datasette-Instanzen einzubinden.
datasette install datasette-sqlite-jsonschema
Weitere Informationen finden Sie unter „Verwenden von sqlite-jsonschema
mit Datasette“ .
sqlite3
CLI Laden Sie für die sqlite3
-CLI entweder eine vorkompilierte Erweiterung von der Seite „Releases“ herunter oder erstellen Sie sie selbst. Verwenden Sie dann den Befehl .load
dot.
.load . / jsonschema0
select jsonschema_version();
' v0.2.1 '
Wenn Sie sqlite-jsonschema
auf andere Weise als oben aufgeführt verwenden, laden Sie eine vorkompilierte Erweiterung von der Seite „Releases“ herunter und laden Sie sie in Ihre Umgebung. Laden Sie die Datei jsonschema0.dylib
(für MacOS), jsonschema0.so
(Linux) oder jsonschema0.dll
(Windows) von einer Version herunter und laden Sie sie in Ihre SQLite-Umgebung.
Hinweis: Die
0
im Dateinamen (jsonschema0.dylib
/jsonschema0.so
/jsonschema0.dll
) bezeichnet die Hauptversion vonsqlite-jsonschema
. Derzeit istsqlite-jsonschema
eine Version vor Version 1, Sie können also mit wichtigen Änderungen in zukünftigen Versionen rechnen.
Möglicherweise gibt es in der von Ihnen verwendeten SQLite-Clientbibliothek eine Methode namens „loadExtension“ oder „load_extension“. Alternativ können Sie als letzten Ausweg die SQL-Funktion load_extension()
verwenden.
Stellen Sie sicher, dass Rust, make und ein C-Compiler installiert sind. Dann git clone
dieses Repository und führe make loadable-release
aus.
git clone https://github.com/asg017/sqlite-jsonschema.git
cd sqlite-jsonschema
make loadable-release
Sobald Sie fertig sind, wird Ihre kompilierte Erweiterung unter dist/release/
angezeigt, je nach Betriebssystem entweder als jsonschema0.so
, jsonschema0.dylib
oder jsonschema0.dll
.
Sehen Sie sich die vollständige API-Referenz für jede sqlite-jsonschema
-SQL-Funktion an.
Ich (Alex?) habe viel Zeit und Energie in dieses Projekt und viele andere Open-Source-Projekte gesteckt. Wenn Ihr Unternehmen oder Ihre Organisation diese Bibliothek nutzt (oder Sie großzügig sind), denken Sie bitte darüber nach, meine Arbeit zu unterstützen, oder teilen Sie dieses Projekt mit einem Freund!
sqlite-xsv
, Eine SQLite-Erweiterung für die Arbeit mit CSVssqlite-http
, Eine SQLite-Erweiterung zum Senden von HTTP-Anfragensqlite-loadable-rs
, Ein Framework zum Schreiben von SQLite-Erweiterungen in Rust