SQLite 驅動程式¶
適用於: C/C++, GLib/Ruby, Go, Python, R
SQLite 驅動程式提供對 SQLite 資料庫的存取。
此驅動程式本質上是一個在 ADBC 開發期間使用的「參考」驅動程式。它通常支援大多數 ADBC 功能,但尚未關注最佳化。
安裝¶
對於 conda-forge 使用者
mamba install libadbc-driver-sqlite
安裝 C/C++ 套件並使用 Go 驅動程式管理器。需要 CGO。
go get github.com/apache/arrow-adbc/go/adbc/drivermgr
# For conda-forge
mamba install adbc-driver-sqlite
# For pip
pip install adbc_driver_sqlite
install.packages("adbcsqlite")
用法¶
若要連線到資料庫,請在建構 `AdbcDatabase
` 時提供 “uri” 參數。這應該是檔案名稱或 URI 檔案名稱。如果省略,則預設為記憶體內資料庫,但該資料庫將在所有連線之間共用。
#include "arrow-adbc/adbc.h"
// Ignoring error handling
struct AdbcDatabase database;
AdbcDatabaseNew(&database, nullptr);
AdbcDatabaseSetOption(&database, "driver", "adbc_driver_sqlite", nullptr);
AdbcDatabaseSetOption(&database, "uri", "<sqlite uri>", nullptr);
AdbcDatabaseInit(&database, nullptr);
import adbc_driver_sqlite.dbapi
with adbc_driver_sqlite.dbapi.connect() as conn:
pass
library(adbcdrivermanager)
# Use the driver manager to connect to a database
db <- adbc_database_init(adbcsqlite::adbcsqlite(), uri = ":memory:")
con <- adbc_connection_init(db)
您必須在 LD_LIBRARY_PATH 上,或在執行此程式時與可執行檔相同的目錄中,擁有 libadbc_driver_sqlite.so。這需要 CGO 並載入 C++ ADBC sqlite 驅動程式。
import (
"context"
"github.com/apache/arrow-adbc/go/adbc"
"github.com/apache/arrow-adbc/go/adbc/drivermgr"
)
func main() {
var drv drivermgr.Driver
db, err := drv.NewDatabase(map[string]string{
"driver": "adbc_driver_sqlite",
adbc.OptionKeyURI: "<sqlite uri>",
})
if err != nil {
// handle error
}
defer db.Close()
cnxn, err := db.Open(context.Background())
if err != nil {
// handle error
}
defer cnxn.Close()
}
支援的功能¶
大量資料載入¶
支援大量資料載入。從 Arrow 類型到 SQLite 類型的對應與下文相同。
分割的結果集¶
不支援分割的結果集。
執行階段可載入擴充功能¶
ADBC 允許載入 SQLite 擴充功能。有關擴充功能本身的詳細資訊,請參閱 SQLite 文件中的 「執行階段可載入擴充功能」。
若要載入擴充功能,需要三個要素
透過設定啟用擴充功能載入
設定路徑
設定進入點
這些選項只能在連線使用 `AdbcConnectionInit()
` 完全初始化後才能設定。
選項¶
adbc.sqlite.load_extension.enabled
是否啟用 (“true”) 或停用 (“false”) 擴充功能載入。預設為停用。
adbc.sqlite.load_extension.path
若要載入擴充功能,請先將此選項設定為要載入的擴充功能的路徑。這還不會載入擴充功能。
adbc.sqlite.load_extension.entrypoint
設定路徑後,將選項設定為擴充功能中的進入點 (或 NULL) 以實際載入擴充功能。
範例¶
// TODO
// TODO
import adbc_driver_sqlite.dbapi as dbapi
with dbapi.connect() as conn:
conn.enable_load_extension(True)
conn.load_extension("path/to/extension.so")
此驅動程式實作與 Python 標準函式庫 `sqlite3
` 模組相同的 API,因此為其建置的套件也應該可以運作。例如,sqlite-zstd
import adbc_driver_sqlite.dbapi as dbapi
import sqlite_zstd
with dbapi.connect() as conn:
conn.enable_load_extension(True)
sqlite_zstd.load(conn)
# TODO
交易¶
支援交易。
類型推斷/類型支援¶
SQLite 不強制要求欄位中的值具有相同的類型。SQLite 驅動程式將在讀取結果集時嘗試推斷欄位的最佳 Arrow 類型。在讀取第一批資料時,驅動程式將處於「類型提升」模式。每個欄位的推斷類型最初為 INT64,並在需要時轉換為 DOUBLE,然後轉換為 STRING。之後,讀取更多批次將嘗試轉換為推斷的類型。如果無法轉換,將引發錯誤 (例如,如果讀取了字串值,但欄位被推斷為 INT64 類型)。
未來也可能支援其他行為。
綁定參數將適當地轉換為 SQLite 的整數、浮點數或文字類型。支援的 Arrow 類型為:帶號和無號整數、(大型)字串、float 和 double。
驅動程式特定的選項
adbc.sqlite.query.batch_rows
要讀取的批次大小。因此,這也控制讀取多少列來推斷 Arrow 類型。
軟體版本¶
對於 Python wheels,隨附的 SQLite 版本為 3.40.1。對於 conda-forge 套件,sqlite 的版本與您 Conda 環境中的 sqlite 版本相同。