Skip to content

Latest commit

 

History

History
105 lines (83 loc) · 6.26 KB

backends.md

File metadata and controls

105 lines (83 loc) · 6.26 KB

Backend configuration and types

Protocols and construction

Backend Protocol Source options
SQLite db+sqlite Required database, or path / url alias.
PostgreSQL db+postgresql, db+postgres dsn, url, or connection fields.
MySQL db+mysql dsn, url, or connection fields.
DuckDB db+duckdb database=":memory:" or existing connection. Requires the duckdb extra.
SQLAlchemy db+sqlalchemy url or existing engine. Requires SQLAlchemy and a backend driver.
ODBC db+odbc Required connection_string; optional user, password, batch_size=65535. Requires the odbc extra and an OS driver.

SQLite accepts a path, :memory:, or SQLite URL. Network backends accept host, port, database, user, and password. PostgreSQL accepts sslmode; MySQL accepts ssl_mode and charset. Both accept min_connections and max_connections. An explicit DSN or URL takes precedence over connection fields. fsspec config sections use the backend protocol name; explicit constructor arguments take precedence.

Parameters

Raw query(sql, params=None) uses driver-specific placeholders:

Backend Placeholder
SQLite ?
PostgreSQL $1, $2, ...
MySQL ?

SQLAlchemy uses its driver's SQL parameter conventions; DuckDB uses ?. ODBC parameters are passed to its driver. The bridge accepts scalar parameters of None, bool, int, float, str, and bytes.

SQLite mapping

SQLite values are converted into Arrow arrays with a small affinity mapper. Query results use declared column metadata plus observed non-null runtime value types, so NULL-first and mixed numeric expression columns can still produce numeric Arrow arrays.

SQLite value/type Arrow type
boolean-like bool
integer-like int64
real/float/double float64
blob/binary binary
everything else utf8

For writes, Arrow Null columns bind SQLite NULL. Temporal arrays are bound as integer epoch values. When a query produces mixed SQLite runtime types in one expression column, cast explicitly in SQL for predictable Arrow output.

PostgreSQL and MySQL mapping

The sqlx backends convert common database scalar types into Arrow:

Backend Database type family Arrow type
PostgreSQL BOOL bool
PostgreSQL INT2, INT4, INT8, OID int64
PostgreSQL FLOAT4, FLOAT8 float64
PostgreSQL BYTEA binary
PostgreSQL TEXT, VARCHAR, CHAR, BPCHAR utf8
MySQL BOOLEAN bool
MySQL signed and unsigned integer families int64
MySQL FLOAT, DOUBLE float64
MySQL BINARY, VARBINARY, *BLOB binary
MySQL CHAR, VARCHAR, *TEXT, JSON, enums utf8

Additional native output mappings are:

Backend Database type Arrow type
PostgreSQL DATE date32
PostgreSQL TIME time64[us]
PostgreSQL TIMESTAMP, TIMESTAMPTZ timestamp[us] without timezone metadata
PostgreSQL NUMERIC, UUID, JSON, JSONB utf8 containing the decoded value's text representation
MySQL DATE date32
MySQL DATETIME, TIMESTAMP timestamp[us] without timezone metadata
MySQL DECIMAL, JSON utf8 containing the decoded value's text representation

PostgreSQL NAME also maps to UTF-8. MySQL YEAR and BIT follow the integer mapping; SET follows the string mapping. Unsigned MySQL integers that do not fit in Arrow int64 return an error. Non-null output types absent from these mappings raise an unsupported-type error; explicit SQL casts can select a supported type.

Metadata and writes

SQLite introspection uses PRAGMA database_list, sqlite_master, table_info, index_list, index_info, and foreign_key_list. Schema listings do not count every relation; relation lookups inspect the requested relation.

PostgreSQL uses information_schema and pg_catalog. Root listings exclude pg_catalog, information_schema, and toast schemas. MySQL uses information_schema and excludes information_schema, mysql, performance_schema, and sys from root listings. MySQL database names are schema directories.

Native PostgreSQL overwrite uses TRUNCATE TABLE; MySQL and SQLite use DELETE FROM in the insertion transaction. Python adapter atomicity depends on the adapter. ODBC lists no indexes and does not provide portable view definitions.

Native queries expose RecordBatchStream through the Rust Database trait. The current sqlx backends construct Arrow arrays from rows. ArrowExtraction records the extraction strategy without changing path semantics.