Uma extensão SQLite para validar objetos JSON com esquema JSON. Baseado em sqlite-loadable-rs
e na caixa jsonschema
.
Se a sua empresa ou organização considera esta biblioteca útil, considere apoiar o meu trabalho!
.load . / jsonschema0
select jsonschema_matches( ' {"maxLength": 5} ' , json_quote( ' alex ' ));
Use com as restrições CHECK
do SQLite para validar colunas JSON antes de inserir em uma tabela.
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
Encontre todos os valores em uma coluna que não correspondam a um esquema JSON.
select
rowid,
jsonschema_matches(
' {
"type": "array",
"items": {
"type": "number"
}
} ' ,
foo
) as valid
from bar
where not valid;
Linguagem | Instalar | |
---|---|---|
Pitão | pip install sqlite-jsonschema | |
Conjunto de dados | datasette install datasette-sqlite-jsonschema | |
Node.js | npm install sqlite-jsonschema | |
Deno | deno.land/x/sqlite_jsonschema | |
Rubi | gem install sqlite-jsonschema | |
Lançamento do Github | ||
Ferrugem | cargo add sqlite-jsonschema |
sqlite-jsonschema
é distribuído em pip, npm e https://deno.land/x para programadores Python, Node.js e Deno. Também existem extensões pré-construídas disponíveis para uso em outros ambientes.
Para desenvolvedores Python, use o pacote sqlite-jsonschema
Python:
pip install sqlite-jsonschema
A extensão sqlite-jsonschema
pode então ser carregada em um objeto sqlite3
Connection.
import sqlite3
import sqlite_jsonschema
db = sqlite3 . connect ( ':memory:' )
sqlite_jsonschema . load ( db )
db . execute ( 'select jsonschema_version(), jsonschema()' ). fetchone ()
Consulte Usando sqlite-jsonschema
com Python para obter detalhes.
Para desenvolvedores Node.js, use o pacote NPM sqlite-jsonschema
:
npm install sqlite-jsonschema
A extensão sqlite-jsonschema
pode então ser carregada em uma conexão 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"
Consulte Usando sqlite-jsonschema
com Node.js para obter detalhes.
Para desenvolvedores Deno, use o módulo x/sqlite_jsonschema Deno com 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 Usando sqlite-jsonschema
com Deno para obter detalhes.
Para Datasette, use o plug-in datasette-sqlite-jsonschema
para incluir funções sqlite-jsonschema
em suas instâncias do Datasette.
datasette install datasette-sqlite-jsonschema
Consulte Usando sqlite-jsonschema
com Datasette para obter detalhes.
sqlite3
Para a CLI sqlite3
, baixe uma extensão pré-compilada na página Releases ou crie você mesmo. Em seguida, use o comando .load
ponto.
.load . / jsonschema0
select jsonschema_version();
' v0.2.1 '
Se você estiver usando sqlite-jsonschema
de uma maneira diferente das listadas acima, baixe uma extensão pré-compilada na página Releases e carregue-a em seu ambiente. Baixe o arquivo jsonschema0.dylib
(para MacOS), jsonschema0.so
(Linux) ou jsonschema0.dll
(Windows) de uma versão e carregue-o em seu ambiente SQLite.
Nota: O
0
no nome do arquivo (jsonschema0.dylib
/jsonschema0.so
/jsonschema0.dll
) indica a versão principal dosqlite-jsonschema
. Atualmentesqlite-jsonschema
é anterior à v1, portanto, espere alterações significativas em versões futuras.
Provavelmente existe algum método chamado "loadExtension" ou "load_extension" na biblioteca cliente SQLite que você está usando. Alternativamente, como último recurso, use a função SQL load_extension()
.
Certifique-se de ter Rust, make e um compilador C instalados. Então git clone
este repositório e execute make loadable-release
.
git clone https://github.com/asg017/sqlite-jsonschema.git
cd sqlite-jsonschema
make loadable-release
Depois de concluída, sua extensão compilada aparecerá em dist/release/
, como jsonschema0.so
, jsonschema0.dylib
ou jsonschema0.dll
, dependendo do seu sistema operacional.
Veja a referência completa da API para cada função SQL sqlite-jsonschema
.
Eu (Alex?) gastei muito tempo e energia neste projeto e em muitos outros projetos de código aberto. Se sua empresa ou organização usa esta biblioteca (ou você se sente generoso), considere apoiar meu trabalho ou compartilhe este projeto com um amigo!
sqlite-xsv
, uma extensão SQLite para trabalhar com CSVssqlite-http
, uma extensão SQLite para fazer solicitações HTTPsqlite-loadable-rs
, uma estrutura para escrever extensões SQLite em Rust