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
有关更多示例,请参见 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)
您必须在您的 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 版本相同。