# What changed in elasticsearch-dbapi

> 27 changes in elasticsearch-dbapi 0.2 to 0.3 from its official release notes, upgrade guides and advisories: 12 breaking. Each one cited. Sources checked 2026-10-25. HTML: https://unstale.sh/pypi/elasticsearch-dbapi/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## elasticsearch-dbapi 0.3

### Breaking changes

- Reflected byte and short fields report INTEGER, half_float reports FLOAT, scaled_float reports DOUBLE, and unsigned_long reports LONG. (0.3.0) — [release notes](https://github.com/preset-io/elasticsearch-dbapi/releases/tag/0.3.0)
- Queries that may return truncated unpaged results now raise DataError instead of silently returning partial rows or groups. (0.3.0) — [release notes](https://github.com/preset-io/elasticsearch-dbapi/releases/tag/0.3.0)
- Client exceptions are mapped to DB-API exceptions from es.exceptions; original Elasticsearch or OpenSearch exceptions are chained as __cause__. (0.3.0) — [release notes](https://github.com/preset-io/elasticsearch-dbapi/releases/tag/0.3.0)
- Reflected `double`, `float`, `half_float`, and `scaled_float` columns use Float and Python float instead of Numeric and Decimal. (0.3.0) — [release notes](https://github.com/preset-io/elasticsearch-dbapi/releases/tag/0.3.0)
- Grouped top-N queries ordered by aggregates are checked against the bucket ceiling and raise DataError when results may be incomplete; safe listings incur an additional SQL request. (0.3.0) — [release notes](https://github.com/preset-io/elasticsearch-dbapi/releases/tag/0.3.0)
- An explicit LIMIT on a v2 plain SELECT bypasses `plugins.query.size_limit`; limits above 10000 use SQL cursors and raise DataError if cursors are unavailable. (0.3.0) — [release notes](https://github.com/preset-io/elasticsearch-dbapi/releases/tag/0.3.0)
- Grouped-field ordering with OFFSET is probed and raises DataError at the bucket ceiling rather than silently returning incomplete results. (0.3.0) — [release notes](https://github.com/preset-io/elasticsearch-dbapi/releases/tag/0.3.0)
- Open Distro plain SELECTs now return every row by requesting a search-window-sized result and paging with the SQL cursor when needed; unavailable cursors beyond 10000 rows raise DataError. (0.3.0) — [release notes](https://github.com/preset-io/elasticsearch-dbapi/releases/tag/0.3.0)
- Full result sets are now fetched and held in memory. Add a LIMIT when querying large indices. (0.3.0) — [release notes](https://github.com/preset-io/elasticsearch-dbapi/releases/tag/0.3.0)
- A subquery returning more than 10000 rows raises DataError because the SQL plugin cannot page it; narrow the subquery or use a physical dataset. (0.3.0) — [release notes](https://github.com/preset-io/elasticsearch-dbapi/releases/tag/0.3.0)
- Supported SQL temporal values are returned as datetime, date, or time objects instead of strings; timezone-aware Elasticsearch values are normalized to UTC. (0.3.0) — [release notes](https://github.com/preset-io/elasticsearch-dbapi/releases/tag/0.3.0)
- `v2=false` now disables v2 mode and keeps the legacy engine, rather than switching v2 mode on. (0.3.0) — [release notes](https://github.com/preset-io/elasticsearch-dbapi/releases/tag/0.3.0)

### Performance

- SQL compilation caching is enabled. (0.3.0) — [release notes](https://github.com/preset-io/elasticsearch-dbapi/releases/tag/0.3.0)

### Behavior and default changes

- Boolean URL arguments accept true/1/yes/on and false/0/no/off. (0.3.0) — [release notes](https://github.com/preset-io/elasticsearch-dbapi/releases/tag/0.3.0)
- `has_table` returns true for aliases. (0.3.0) — [release notes](https://github.com/preset-io/elasticsearch-dbapi/releases/tag/0.3.0)
- OpenSearch 1.x v2 plain SELECTs remain on the v2 engine to preserve floating values and timestamp objects; version discovery is best effort and cached. (0.3.0) — [release notes](https://github.com/preset-io/elasticsearch-dbapi/releases/tag/0.3.0)
- The OpenSearch dialect supports OpenSearch 3, including its default SQL endpoint and unqualified single-table columns. (0.3.0) — [release notes](https://github.com/preset-io/elasticsearch-dbapi/releases/tag/0.3.0)
- Table and view listing and the OpenSearch SELECT 1 ping work without cluster privileges. (0.3.0) — [release notes](https://github.com/preset-io/elasticsearch-dbapi/releases/tag/0.3.0)
- The default OpenSearch SQL endpoint is `_plugins/_sql`; the driver falls back once to `_opendistro/_sql` when the endpoint is missing. An explicit setting is not replaced. (0.3.0) — [release notes](https://github.com/preset-io/elasticsearch-dbapi/releases/tag/0.3.0)
- The OpenSearch dialect ignores and drops `time_zone`; the SQL plugin returns UTC. Remove the URL argument to silence the warning and convert to local time in the application. (0.3.0) — [release notes](https://github.com/preset-io/elasticsearch-dbapi/releases/tag/0.3.0)

### Fixes and other changes

- Elasticsearch and OpenSearch plain SELECT results are fetched across pages instead of being cut off at the first `fetch_size` page. (0.3.0) — [release notes](https://github.com/preset-io/elasticsearch-dbapi/releases/tag/0.3.0)
- LIMIT queries on a v2 connection stay on v2, preserving its functions and timestamp result types instead of taking the legacy path. (0.3.0) — [release notes](https://github.com/preset-io/elasticsearch-dbapi/releases/tag/0.3.0)
- Reflected fields report their corresponding SQL types, including DOUBLE, FLOAT, INTEGER, LONG, and BOOLEAN, rather than a generic LONG or FLOAT. (0.3.0) — [release notes](https://github.com/preset-io/elasticsearch-dbapi/releases/tag/0.3.0)
- `server_version_info` is populated from the cluster. (0.3.0) — [release notes](https://github.com/preset-io/elasticsearch-dbapi/releases/tag/0.3.0)
- Statements over subqueries now apply outer filters and limits correctly; subqueries receive an explicit search-window LIMIT and run on v2. (0.3.0) — [release notes](https://github.com/preset-io/elasticsearch-dbapi/releases/tag/0.3.0)
- The legacy engine no longer confuses a table-qualified column with a select-list alias of the same name; aliases are renamed in the sent statement and restored in results. (0.3.0) — [release notes](https://github.com/preset-io/elasticsearch-dbapi/releases/tag/0.3.0)

## elasticsearch-dbapi 0.2

### Behavior and default changes

- OpenSearch queries now support removing default from the query. (0.2.13) — [release notes](https://github.com/preset-io/elasticsearch-dbapi/releases/tag/0.2.13)
