Расширение SQLite для проверки объектов JSON с помощью схемы JSON. На основе sqlite-loadable-rs
и крейта jsonschema
.
Если ваша компания или организация считает эту библиотеку полезной, рассмотрите возможность поддержки моей работы!
.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.
select
rowid,
jsonschema_matches(
' {
"type": "array",
"items": {
"type": "number"
}
} ' ,
foo
) as valid
from bar
where not valid;
Язык | Установить | |
---|---|---|
Питон | pip install sqlite-jsonschema | |
Набор данных | datasette install datasette-sqlite-jsonschema | |
Node.js | npm install sqlite-jsonschema | |
Дено | deno.land/x/sqlite_jsonschema | |
Руби | gem install sqlite-jsonschema | |
Релиз на Гитхабе | ||
Ржавчина | cargo add sqlite-jsonschema |
sqlite-jsonschema
распространяется на pip, npm и https://deno.land/x для программистов Python, Node.js и Deno. Существуют также готовые расширения, доступные для использования в других средах.
Для разработчиков Python используйте пакет Python sqlite-jsonschema
:
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 ()
Подробности см. в разделе «Использование sqlite-jsonschema
с Python» .
Для разработчиков Node.js используйте пакет NPM sqlite-jsonschema
:
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"
Подробности см. в разделе «Использование sqlite-jsonschema
с Node.js» .
Для разработчиков Deno используйте модуль Deno x/sqlite_jsonschema с 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 ) ;
Подробности см. в разделе «Использование sqlite-jsonschema
с Deno» .
Для Datasette используйте плагин datasette-sqlite-jsonschema
, чтобы включить функции sqlite-jsonschema
в экземпляры Datasette.
datasette install datasette-sqlite-jsonschema
Подробности см. в разделе «Использование sqlite-jsonschema
с набором данных» .
sqlite3
Для интерфейса командной строки sqlite3
либо загрузите предварительно скомпилированное расширение со страницы «Релиз», либо создайте его самостоятельно. Затем используйте команду .load
dot.
.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
доступна до версии 1, поэтому ожидайте серьезных изменений в будущих версиях.
Скорее всего, в используемой вами клиентской библиотеке SQLite есть какой-то метод под названием «loadExtension» или «load_extension». Альтернативно, в крайнем случае, используйте функцию SQL load_extension()
.
Убедитесь, что у вас установлены 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
, в зависимости от вашей операционной системы.
См. полный справочник по API для каждой функции SQL sqlite-jsonschema
.
Я (Алекс?) потратил много времени и энергии на этот проект и многие другие проекты с открытым исходным кодом. Если ваша компания или организация использует эту библиотеку (или вы щедры), пожалуйста, поддержите мою работу или поделитесь этим проектом с другом!
sqlite-xsv
— расширение SQLite для работы с CSV.sqlite-http
— расширение SQLite для выполнения HTTP-запросов.sqlite-loadable-rs
, Фреймворк для написания расширений SQLite на Rust.