Adapters#
SQLSpec ships adapter packages for each supported database or driver. Each adapter exports a typed config class and a driver implementation.
Async PostgreSQL via asyncpg.
Sync + Async PostgreSQL via psycopg.
Async PostgreSQL via psqlpy (Rust).
Sync SQLite via stdlib sqlite3.
Async SQLite via aiosqlite.
Sync DuckDB with Arrow support.
Sync + Async Oracle via oracledb.
Sync + Async MySQL via mysql-connector-python.
Sync MySQL via PyMySQL.
Async MySQL via asyncmy.
Async MySQL via aiomysql.
Google BigQuery.
Google Cloud Spanner.
Async CockroachDB via asyncpg.
Sync + Async CockroachDB via psycopg.
Arrow Database Connectivity.
Sync Arrow-over-ODBC for any ODBC-compliant database.
Sync SQL Server via Microsoft's official mssql-python driver with Arrow loading and BulkCopy.
Sync SQL Server via pymssql / FreeTDS.
Sync + Async IBM Db2 LUW via ibm_db with a built-in SQLGlot dialect.
Feature Comparison#
Read config.supports_reliable_rowcount from the configuration used to create
the session when deciding whether to verify a modifying statement with a follow-up
query. The flag describes affected-row reporting for individual DML statements;
SELECT, scripts, and batch operations retain their adapter-specific count semantics.
Type coercion capabilities describe the default adapter parameter and result paths.
Custom statement coercions, driver feature overrides, and database column types can
change these behaviors. Timestamp precision describes the adapter binding path; a
lower-precision database column can still truncate the value. native binding
means the parameter pipeline preserves the Python value for the driver.
Adapter |
Sync |
Async |
Connection Pool |
Arrow Support |
Native Pipelines |
Reliable rowcount |
Datetime Binding |
Timestamp Precision |
JSON Decoded |
UUID Binding |
|---|---|---|---|---|---|---|---|---|---|---|
asyncpg |
Yes |
Yes |
Yes |
Yes |
Yes |
Native |
Microsecond |
Yes |
Native |
|
psycopg |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
Native |
Microsecond |
Yes |
Native |
psqlpy |
Yes |
Yes |
Yes |
Yes |
Native |
Microsecond |
Yes |
Native |
||
sqlite |
Yes |
Yes |
Yes |
ISO Text |
Microsecond |
Text |
||||
aiosqlite |
Yes |
Yes |
Yes |
ISO Text |
Microsecond |
Text |
||||
duckdb |
Yes |
Yes |
Yes |
Yes |
ISO Text |
Microsecond |
Text |
|||
oracledb |
Yes |
Yes |
Yes |
Yes |
Yes |
Native |
Microsecond |
Yes |
Native |
|
mysql-connector |
Yes |
Yes |
Yes |
Yes |
Native |
Microsecond |
Text |
|||
pymysql |
Yes |
Yes |
Yes |
Native |
Microsecond |
Text |
||||
asyncmy |
Yes |
Yes |
Yes |
Native |
Microsecond |
Text |
||||
aiomysql |
Yes |
Yes |
Yes |
Native |
Microsecond |
Text |
||||
bigquery |
Yes |
Yes |
Yes |
Native |
Microsecond |
Yes |
Text |
|||
spanner |
Yes |
Yes |
Yes |
Native |
Microsecond |
Yes |
Text |
|||
cockroach (asyncpg) |
Yes |
Yes |
Yes |
Yes |
Yes |
Native |
Microsecond |
Yes |
Native |
|
cockroach (psycopg) |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
Native |
Microsecond |
Yes |
Native |
adbc |
Yes |
Yes |
No |
Native |
Microsecond |
Native |
||||
arrow_odbc |
Yes |
Yes |
No |
ISO Text |
Microsecond |
Text |
||||
mssql_python |
Yes |
Yes |
Yes |
Yes |
Native |
Microsecond |
Native |
|||
pymssql |
Yes |
Yes |
Yes |
Native |
Microsecond |
Text |
||||
db2 |
Yes |
Yes |
Yes |
Yes |
Native |
Microsecond |
Text |