用於使用 JSON 模式驗證 JSON 物件的 SQLite 擴充。基於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;
語言 | 安裝 | |
---|---|---|
Python | pip install sqlite-jsonschema | |
數據集 | datasette install datasette-sqlite-jsonschema | |
Node.js | npm install sqlite-jsonschema | |
德諾 | deno.land/x/sqlite_jsonschema | |
紅寶石 | gem install sqlite-jsonschema | |
Github 發布 | ||
鏽 | cargo add sqlite-jsonschema |
sqlite-jsonschema
分佈在 pip、npm 和 https://deno.land/x 上,供 Python、Node.js 和 Deno 程式設計師使用。還有可在其他環境中使用的預先建置擴充功能。
對於 Python 開發人員,請使用sqlite-jsonschema
Python 套件:
pip install sqlite-jsonschema
然後可以將sqlite-jsonschema
擴充載入到sqlite3
Connection 物件中。
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
CLI對於sqlite3
CLI,可以從發布頁面下載預先編譯的擴展,也可以自行建置。然後使用.load
點指令。
.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
是 v1 之前的版本,因此預計未來版本中會有重大變化。
您正在使用的 SQLite 用戶端程式庫中可能會有一些名為「loadExtension」或「load_extension」的方法。或者,作為最後的手段,使用load_extension()
SQL 函數。
確保安裝了 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
,具體取決於您的作業系統。
請參閱每個sqlite-jsonschema
SQL 函數的完整 API 參考。
我(Alex?)在這個專案和許多其他開源專案上花費了大量的時間和精力。如果您的公司或組織使用這個庫(或您感到慷慨),那麼請考慮支持我的工作,或與朋友分享這個專案!
sqlite-xsv
,用於處理 CSV 的 SQLite 擴展sqlite-http
,用於發出 HTTP 請求的 SQLite 擴展sqlite-loadable-rs
,用 Rust 寫 SQLite 擴充的框架