快速入門

在這裡,我們將簡要介紹 ADBC 與 SQLite 驅動程式的基本功能。

安裝

pip install adbc_driver_manager adbc_driver_sqlite pyarrow

DBAPI (PEP 249) 風格的 API

如果已安裝 PyArrow,ADBC 會提供一個 DBAPI 標準風格的高階 API。

建立連線

>>> import adbc_driver_sqlite.dbapi
>>> conn = adbc_driver_sqlite.dbapi.connect()

在應用程式碼中,連線使用後必須關閉,否則可能會發生記憶體洩漏。連線可以用作上下文管理器來完成此操作。

建立游標

>>> cursor = conn.cursor()

在應用程式碼中,游標使用後必須關閉,否則可能會發生記憶體洩漏。游標可以用作上下文管理器來完成此操作。

執行查詢

我們可以執行查詢,並透過正常的、逐列的 DBAPI 介面取得結果

>>> cursor.execute("SELECT 1, 2.0, 'Hello, world!'")
>>> cursor.fetchone()
(1, 2.0, 'Hello, world!')
>>> cursor.fetchone()

我們也可以透過非標準方法取得 Arrow 資料格式的結果

>>> cursor.execute("SELECT 1, 2.0, 'Hello, world!'")
>>> cursor.fetch_arrow_table()
pyarrow.Table
1: int64
2.0: double
'Hello, world!': string
----
1: [[1]]
2.0: [[2]]
'Hello, world!': [["Hello, world!"]]

參數化查詢

我們可以在查詢中綁定參數

>>> cursor.execute("SELECT ? + 1 AS the_answer", parameters=(41,))
>>> cursor.fetch_arrow_table()
pyarrow.Table
the_answer: int64
----
the_answer: [[42]]

大量資料匯入

到目前為止,我們主要演示了常用的 DBAPI 介面。ADBC API 也提供了額外的方法。例如,我們可以將 Arrow 資料表插入到新的資料庫表格中

>>> import pyarrow
>>> table = pyarrow.table([[1, 2], ["a", None]], names=["ints", "strs"])
>>> cursor.adbc_ingest("sample", table)
2
>>> cursor.execute("SELECT COUNT(DISTINCT ints) FROM sample")
>>> cursor.fetchall()
[(2,)]

我們也可以附加到現有表格

>>> table = pyarrow.table([[2, 3], [None, "c"]], names=["ints", "strs"])
>>> cursor.adbc_ingest("sample", table, mode="append")
2
>>> cursor.execute("SELECT COUNT(DISTINCT ints) FROM sample")
>>> cursor.fetchall()
[(3,)]

取得資料庫/驅動程式中繼資料

我們可以使用另一個擴展方法(這次是在連線上)來取得有關驅動程式和資料庫的資訊

>>> conn.adbc_get_info()["vendor_name"]
'SQLite'
>>> conn.adbc_get_info()["driver_name"]
'ADBC SQLite Driver'

我們還可以查詢資料庫中的表格和欄位。這會提供一個巢狀結構,描述所有目錄、結構描述、表格和欄位

>>> info = conn.adbc_get_objects().read_all().to_pylist()
>>> main_catalog = info[0]
>>> schema = main_catalog["catalog_db_schemas"][0]
>>> tables = schema["db_schema_tables"]
>>> tables[0]["table_name"]
'sample'
>>> [column["column_name"] for column in tables[0]["table_columns"]]
['ints', 'strs']

我們可以取得表格的 Arrow 結構描述

>>> conn.adbc_get_table_schema("sample")
ints: int64
strs: string