امتداد SQLite للتحقق من صحة كائنات JSON باستخدام مخطط JSON. استنادًا إلى sqlite-loadable-rs
وصندوق jsonschema
.
إذا وجدت شركتك أو مؤسستك هذه المكتبة مفيدة، فكر في دعم عملي!
.load . / jsonschema0
select jsonschema_matches( ' {"maxLength": 5} ' , json_quote( ' alex ' ));
استخدمه مع قيود CHECK
الخاصة بـ SQLite للتحقق من صحة أعمدة 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، استخدم حزمة sqlite-jsonschema
NPM:
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، استخدم وحدة x/sqlite_jsonschema Deno مع 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
مع Datasette للحصول على التفاصيل.
sqlite3
سطر الأوامر بالنسبة لـ sqlite3
CLI، قم إما بتنزيل ملحق تم تجميعه مسبقًا من صفحة الإصدارات أو قم بإنشائه بنفسك. ثم استخدم الأمر .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، لذا توقع حدوث تغييرات جذرية في الإصدارات المستقبلية.
من المحتمل أن تكون هناك طريقة تسمى "loadExtension" أو "load_extension" في مكتبة عميل SQLite التي تستخدمها. وبدلاً من ذلك، كحل أخير، استخدم وظيفة 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 للعمل مع ملفات CSVsqlite-http
، امتداد SQLite لتقديم طلبات HTTPsqlite-loadable-rs
، إطار عمل لكتابة ملحقات SQLite في Rust