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 文件中的 「執行階段可載入擴充功能」

若要載入擴充功能,需要三個要素

  1. 透過設定啟用擴充功能載入

  2. 設定路徑

  3. 設定進入點

這些選項只能在連線使用 `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 版本相同。