SQLite 驱动程序

语言:C/C++ 状态:稳定

SQLite 驱动程序提供对 SQLite 数据库的访问。

该驱动程序本质上是一个在 ADBC 开发过程中使用的“参考”驱动程序。它通常支持大多数 ADBC 功能,但尚未进行优化。

安装

从 conda-forge 安装 libadbc-driver-sqlite

mamba install libadbc-driver-sqlite

安装 C/C++ 驱动程序,然后使用 Go 驱动程序管理器。需要 CGO。

go get github.com/apache/arrow-adbc/go/adbc/drivermgr

从 conda-forge 安装 adbc-driver-sqlite

mamba install adbc-driver-sqlite

从 PyPI 安装 adbc-driver-sqlite

pip install adbc-driver-sqlite

从 CRAN 安装 adbcsqlite

install.packages("adbcsqlite")

此外,该驱动程序可以通过驱动程序管理器从 C/C++、C#、GLib、Go、R、Ruby 和 Rust 使用。

用法

要连接到数据库,请在构建 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

有关更多示例,请参阅 SQLite 食谱

library(adbcdrivermanager)

# Use the driver manager to connect to a database
db <- adbc_database_init(adbcsqlite::adbcsqlite(), uri = ":memory:")
con <- adbc_connection_init(db)

运行此程序时,您必须确保 libadbc_driver_sqlite.so 位于您的 LD_LIBRARY_PATH 中,或者与可执行文件在同一目录中。这需要 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 类型包括:有符号和无符号整数、(长)字符串、浮点数和双精度浮点数。

驱动程序特定选项

adbc.sqlite.query.batch_rows

读取的批次大小。因此,这也控制了读取多少行来推断 Arrow 类型。

软件版本

对于 Python wheel,附带的 SQLite 版本为 3.51.2。对于 conda-forge 包,sqlite 的版本与您的 Conda 环境中的 sqlite 版本相同。