Microsoft Access `.mdb`/`.accdb` into Apache Arrow with ADBC
Microsoft Access `.mdb`/`.accdb`, read and written through adbcBridge — the ADBC driver that loads the database's ODBC driver — read-only on Linux, macOS arm64 and Windows x64. Everything below is the compatibility matrix's record for this row.
Status
PASS
PASS (mdbtools 1.0.1 from source, one local patch: fakeglib g_strsplit)
PASS (Microsoft Access Database Engine 2016 x64, Microsoft Access Driver (*.mdb, *.accdb) = ACEODBC.DLL, reports ACCESS (via ODBC) 04.00.0000; the checked-in access.mdb fixture, so the entry's MDB-Tools-shaped workload — read-only, no parameters, no astral check — is what ran; the first real Jet/ACE measurement of this entry)
Driver and connection string
- ODBC driver
- MDB Tools 1.0 (
odbc-mdbtools) - Wire
- native ODBC
- adbcBridge
- 0.1.1 (release)
The connection string the matrix used, as the connection strings reference records it (File-based (no server)); {drv} is the driver library or its name from odbcinst.ini, and the host, port and credentials are the test server's.
Driver={drv};DBQ=<path>/access.mdb;
Python
import adbcbridge
# {drv}: the ODBC driver library (path), or its name from odbcinst.ini
conn = adbcbridge.connect(uri="Driver={drv};DBQ=<path>/access.mdb;")
with conn.cursor() as cur:
cur.execute("SELECT * FROM my_table")
table = cur.fetch_arrow_table() # pyarrow.Table
Polars and pandas
import polars as pl, pandas as pd
df = pl.read_database("SELECT * FROM my_table", connection=conn) # Polars, Arrow-native
pdf = pd.read_sql("SELECT * FROM my_table", conn) # pandas 2.2+, ADBC connection
pip install adbcbridge brings the driver library; the Microsoft Access `.mdb`/`.accdb` ODBC driver is installed the way its vendor documents, then named in Driver=. Rust, Go, C# and Java use the same connection string through their ADBC driver managers — see the docs.
What the matrix recorded
the driver executes no DDL/DML and has no SQLBindParameter; 32-bit SQLLEN, as Db2