This repository is a fork of https://github.com/Mause/duckdb_engine. Entries from v0.18.0 onward are maintained in this fork; earlier entries are preserved from the upstream project for historical context.
1.5.4.7 (2026-07-31)
- reflect valid quoted DuckDB schema names containing dots without crashing or splitting quoted identifier components
- update Ruff to 0.16.1 and refresh locked development dependencies within existing version constraints
1.5.4.6 (2026-07-30)
- serialize the first DuckDB reserved-word catalog load so concurrently created engines do not repeat the query or race during DuckDB initialization
- update
tyto 0.0.65 and refresh locked development dependencies within existing version constraints
1.5.4.5 (2026-07-24)
- adapt SQLAlchemy 2.1 execution-context and PostgreSQL reflection API changes so statement execution and table reflection keep working (#142)
- validate DuckDB 1.5.5 and SQLAlchemy 2.1.0b3, update
tyto 0.0.63 and Ruff to 0.16.0, and refresh locked development dependencies
1.5.4.4 (2026-07-17)
- preserve healthy pooled connections when DuckDB query errors contain words such as
timeoutorsocketinstead of misclassifying those programming errors as disconnects, while recognizing DuckDB's actualConnection already closederror
- update
tyto0.0.60and refresh locked development dependencies within existing version constraints
1.5.4.3 (2026-07-10)
- expose the supported verb-style MotherDuck Flight helpers and the
max_runtime_secFlight version column - add
md_update_dive_status()for updating public Dive status metadata through SQLAlchemy
- compile Flight list, run-list, log, and version helpers to the released MotherDuck table-function names while keeping the older Python helper names as deprecated compatibility aliases
- extend the validated compatibility matrix to DuckDB 1.4.5, update
tyto0.0.58, and refresh locked development dependencies within existing version constraints
1.5.4.2 (2026-07-03)
- expose MotherDuck Dive status metadata columns on
md_list_dives(),md_create_dive(),md_get_dive(), and other summary-returning Dive helpers
- reject
copy_from_rows(..., include_header=True)for sequence rows without explicitcolumnsinstead of letting DuckDB treat the first data row as the header
- centralize reflection result default handling for multi-reflection methods without changing public behavior
- refresh the locked development dependency set to the latest non-breaking transitive releases within existing version caps
1.5.4.1 (2026-07-01)
- render autoincrement integer primary keys with an implicit DuckDB sequence (
DEFAULT nextval(...)) instead of PostgreSQL's unsupportedSERIAL, soColumn(Integer, primary_key=True)works without an explicitSequence(#128)
1.5.4 (2026-06-26)
- expose MotherDuck
md_user_info().c.regionand Flight runconfigcolumns in the SQLAlchemy table-function helpers - document one-off
md_run_flight(config=...)overrides and selecting effective Flight run config - route
motherduck_enable_server_side_temp_tablesthrough the MotherDuck startup URL parameter bucket
- restore SQLAlchemy 2.0.0+ compatibility by using a reflection fallback on early 2.0 releases
- reject empty MotherDuck Flight config keys before compiling Flight helper calls
- reject invalid MotherDuck Flight config map keys and NUL-containing values before compiling Flight helper calls
- extend the validated compatibility matrix to DuckDB 1.5.4 and SQLAlchemy 2.0.51
- bump the local
typin to0.0.54and the Ruff pre-commit hook to0.15.20after validating the current checks against the latest non-breaking releases - refresh the locked development dependency set to the latest non-breaking transitive releases within existing version caps
1.5.3 (2026-06-02)
- add
quack_query()for stateless DuckDB Quack remote queries on DuckDB 1.5.3+ - add
pragma_storage_info()for SQLAlchemy access to DuckDB storage metadata - add MotherDuck job table-function helpers for job metadata, versions, runs, logs, and job lifecycle operations
- add MotherDuck Dive table-function helpers for Dives-as-code create, update, fetch, versioning, and cleanup workflows
- quote validated table-function named parameters so reserved names such as
limitandoffsetwork with SQLAlchemy helpers
- focus the nox compatibility matrix on active DuckDB release lines while keeping the runtime dependency floor unchanged
- extend the DuckDB compatibility test matrix to include DuckDB 1.5.3
- update the SQLAlchemy compatibility matrix to include SQLAlchemy 2.0.50
- refresh the locked development dependency set to the latest non-breaking releases within existing version caps
- bump the local
typin to0.0.38after validating the current checks against the latest non-breaking release
1.5.2.2 (2026-05-11)
- add
md_user_info()for querying MotherDuck user and organization metadata through SQLAlchemy table-valued functions
- prefer the documented
MOTHERDUCK_TOKENenvironment variable over the lowercase fallback when both are set - reject MotherDuck database names containing commas before building SQLAlchemy URLs
- ignore common PostgreSQL session setup statements and transaction isolation declarations emitted by PostgreSQL-oriented clients
- extract bulk insert builder logic into a focused helper module without changing the public execution option behavior
- revert unreleased PostgreSQL compatibility-mode aliases before publishing them
- bump the local
typin to0.0.34after validating the current checks against the latest non-breaking release - refresh the locked development dependency set to the latest non-breaking releases within existing version caps
- deduplicate reflection fallback wrapper handling
1.5.2.1 (2026-04-25)
- treat MotherDuck transport overrides such as
host,region_host,port,tls, andgrpc_local_subchannel_poolas startup URL parameters so SQLAlchemy URLs andconnect_args["config"]keep working with current MotherDuck routing behavior - derive
duckdb_sqlalchemy.__version__from installed package metadata so the runtime version matches published package metadata and generated user agents - normalize legacy MotherDuck transport aliases such as
motherduck_host,motherduck_port,motherduck_use_tls,motherduck_region_host, andmotherduck_grpc_local_subchannel_poolinto the startup URL parameters the current extension expects, while emitting deprecation warnings - restore the exported package version to
1.5.2so the runtime version matches published package metadata
- bump the local
typin to0.0.32after validating the current checks against the latest non-breaking release - allow
pre-commit4.6.x in the devtools extra - refresh validated dev minimums for
noxandpytest-cov
1.5.2 (2026-04-17)
- prefer MotherDuck's new
session_nameconnection parameter while keepingsession_hint,motherduck_session_hint, andmotherduck_session_nameas deprecated aliases - add
stable_session_name()and keepstable_session_hint()as a deprecated compatibility wrapper - reflect DuckDB
GEOMETRYcolumns as a concrete dialect type on DuckDB 1.5.2+
- extend the DuckDB compatibility test matrix to include DuckDB 1.5.2
- refresh the locked development environment and update local
ty/Ruff pre-commit pins after validation
1.5.1.4 (2026-04-10)
- release 1.5.1.4 with no runtime code changes; this cut only updates package metadata and triggers the GitHub release workflow
1.5.1.3 (2026-04-10)
- keep
motherduck_oauth_tokenin the initialduckdb.connect(..., config=...)call so MotherDuck OAuth connections keep working after the upstream extension started requiring the registered startup option on DuckDB 1.5.1+
- validate the current development dependency set against Python 3.14 and refresh the lockfile to the latest non-breaking packages within the existing version caps
1.5.1.2 (2026-04-08)
- default URLs without an explicit database back to
:memory:before applying DuckDB path query parameters, soduckdb://?access_mode=read_onlyno longer opens a file named from the query string - normalize older MotherDuck startup aliases such as
motherduck_session_hint,motherduck_attach_mode,motherduck_saas_mode, andcachebustinto the canonical URL path-query keys so connection routing and cache isolation keep working
- test SQLAlchemy 2.0.49 in CI, update the
tydev dependency to 0.0.29, and refresh the locked development environment to the latest non-breaking versions within the existing constraints
1.5.1.1 (2026-04-03)
- require SQLAlchemy 2.0.45+ in package metadata and the test matrix to match the reflection API used by the dialect
- default local file-backed DuckDB engines to
QueuePoolwhile keeping MotherDuck onNullPool - treat read-only
WITHstatements and comment-prefixed queries as idempotent for transient retry handling
- install
noxwith thedevanddevtoolsextras so the documentednox -s ...workflow works after standard development installs and in fresh repo checkouts - refresh the locked dev toolchain and bump
tyto 0.0.28 after validating the current suite against the latest allowed package set
1.5.1 (2026-03-26)
- align package version with supported DuckDB version (1.5.1)
- extend the compatibility matrix and lockfile to include DuckDB 1.5.1
- add a native
VARIANTSQLAlchemy type and reflect DuckDBVARIANTcolumns without degrading them toNullType
- DuckDB 1.5.1 is a bugfix release; no dialect-level changes were required beyond validation and metadata updates
- DuckDB 1.5.0 also introduced
GEOMETRY, but the Python binding still raisesUnsupported type: "GEOMETRY"on fetch, so this release does not claim first-class geometry value support yet
1.4.4.8 (2026-03-24)
- stop probing the default isolation level during connection setup to match
duckdb_engine - add an explicit
checkpoint()helper that commits around DuckDB checkpoints on SQLAlchemy connections
1.4.4.7 (2026-03-22)
- reflect
JSONcolumns asJSONduring single-table autoload andMetaData.reflect() - reflect array/list columns from DuckDB metadata instead of degrading them to
NullType - populate reflected enum labels from DuckDB type metadata
- populate reflected primary key columns from
duckdb_constraints() - reflect indexes from
duckdb_indexes()instead of returning an empty list
1.4.4.6 (2026-03-22)
- reflect DuckDB
DOUBLE/FLOAT8columns as SQLAlchemyDOUBLEon SQLAlchemy 2.x
1.4.4.5 (2026-03-22)
- preserve empty
MAPvalues as empty dicts instead of coercing them toNULL - refresh Arrow compatibility and package constraints across supported environments
- refactor bulk insert preparation and
copy_from_rowschunk handling to reduce duplication
- simplify MotherDuck config, query, URL, path, connect-arg, and TTL normalization helpers
- update local lint/type-check tool pins and CI matrix versions
- add repo architecture and execution-plan guidance docs
1.4.4.3 (2026-02-21)
- fix
USMALLINTmax range handling to cover the full0..65535domain - preserve
NULLMAP values asNonein Python instead of coercing to an empty dict
- add
.codex/environments/environment.tomlwith local test/lint/type-check actions
1.4.4.2 (2026-02-05)
- validate config keys before
SETstatements to block SQL injection payloads - validate preload extension names before
LOAD - validate COPY helper table/column/option identifiers and reject SQL fragments
- gate pandas tests on supported pandas/SQLAlchemy combinations
- pin
pandas<2.2innoxSQLAlchemy 1.x sessions for stable matrix runs
- align SQLAlchemy compatibility shims and test typing to satisfy
ty
1.4.4.1 (2026-02-05)
- document DuckDB multiprocessing fork-safety caveat and
spawn/forkserverworkaround
1.4.4 (2026-02-03)
- align package version with supported DuckDB version (1.4.4)
- update test matrix and lockfile to DuckDB 1.4.4
- this release contains no functional changes from 1.4.3
1.4.3 (2026-01-15)
- align package version with supported DuckDB version (1.4.x)
- this release contains no functional changes from 0.19.3
0.19.3 (2025-12-28)
- publish GitHub Pages docs site with Jekyll config and navigation
- add overview, getting started, migration guide, and SEO checklist
- add llms.txt and strengthen README/docs discoverability links
- expand PyPI metadata (keywords, classifiers, documentation URL)
0.19.2 (2025-12-28)
- expand docs guides with additional examples and configuration notes
- refine README wording for a more professional tone
- default empty database URLs to
:memory:for DuckDB connections
- bump package version to 0.19.2
0.19.0 (2025-12-24)
- overhaul README with long-term support positioning, expanded quick starts, and URL/pooling guidance
- add CI and license badges plus clearer compatibility and support policy sections
- reorganize docs/examples pointers for faster onboarding
- bump package version to 0.19.0 for the documentation release
- no runtime code changes in this release
0.18.0 (2025-12-24)
- rename package to
duckdb-sqlalchemyand module toduckdb_sqlalchemy(#2)
- refresh README branding and fork attribution (#2)
- update release/publish tooling and metadata for new package name (#2)
0.17.0 (2025-03-29)
- register filesystems (9f7c796)
0.16.0 (2025-03-29)
- drop python 3.8
- drop python 3.8 (1acd720)
0.15.1 (2025-03-29)
- panics in multi-threaded environments (694d227)
- panics in multi-threaded environments (d42c977), closes #1190
0.15.0 (2025-01-16)
- Add supported MotherDuck connection string parameters (c57f024)
0.14.2 (2025-01-10)
- use full list of reserved words (6dbadf1)
0.14.1 (2025-01-10)
- set div_is_floordiv to False to avoid bad casts (dfbed6d)
0.14.0 (2024-12-16)
- reexport postgresql insert function (51dbb18)
- release 0.14.0 (b07a965)
0.13.7-pre0 (2024-11-24)
- release 0.13.7-pre0 (b31083b)
0.13.6 (2024-11-24)
- avoid mutating caller's connect args (don't accumulate user_agents) (8f39aca)
- deps: update dependency packaging to v24.2 (f5daa5a)
0.13.5 (2024-11-07)
- deps: update dependency duckdb to v1.1.3 (3152ddb)
- nightly: fix default connection references for nightly (c0848d2)
- reflection bug: Fixed bug causing TypeError when using metadata.reflect() (b96c1d2)
- sqlalchemy versions: Added statement to apply changes only for sqlalchemy version 2.0.36 and above (d6fcd32)
0.13.4 (2024-10-22)
- deps: update dependency duckdb to v1.1.2 (d363897)
- propagate kwargs through compilation nodes (95d8cef)
0.13.3 (2024-10-21)
- add varint type (220c18f)
- restrict varint to supported versions (ccdbc06)
- update Map type for 1.0+ (7574837)
0.13.2 (2024-09-04)
0.13.1 (2024-07-29)
- fix: Pass user config option via database name #1064
0.13.0 (2024-06-02)
- first class interval support (286abb5)
- deps: update dependency duckdb to v0.10.3 (7b5249a)
0.12.1 (2024-05-24)
- add new types names for 0.10.3 (8e0ca8e)
0.12.0 (2024-04-21)
- release 0.12.0 (same as rc0) (7842f2c)
0.12.0-rc0 (2024-04-18)
- allow connections to be properly closed (0e57a64)
- release 0.12.0-rc0 (dc71073)
0.11.5 (2024-04-16)
- loosen packaging pin
0.11.4 (2024-04-09)
- drop python 3.7 support (9acdd66)
0.11.3 (2024-04-07)
0.11.2 (2024-03-01)
- support views in has_table (52d6a43)
0.11.1 (2024-02-06)
- Add duckdb-sqlalchemy/sqlalchemy version info to DuckDB user_agent
0.11.0 (2024-02-04)
- comment support (6a00ec0)
0.10.0 (2023-12-24)
- add new uhugeint type (4e01db8)
- remove packaging requirement (5b9cafb)
0.9.5 (2023-12-21)
- fix: support getting table properties using schema with db name prefix (#848)
0.9.4 (2023-12-09)
- fix: Support fetching multiple databases and schemas and their associated tables
0.9.3 (2023-12-05)
- use numeric_dollar where available (f51ee7f)
- add directions for
alembicsupport (d549ba4) - update autoloading docs (b782994)
- update register docs (9081ef7)
- update toc (abcb158)
- update toc (#785) (234a8b8)
0.9.2 (2023-07-23)
- types: map
uintegerto correct type (405769a)
0.9.1 (2023-07-14)
- move numpy to dev dependencies (368c55c)
0.9.0 (2023-06-21)
- added support for try_cast operator (c4318ef) (see SQLAlchemy docs for more information)
0.8.0 (2023-06-20)
- allow passing motherduck_token as a config parameter (b944405)
0.7.3 (2023-05-19)
- don't reflect nested types for now (3a01f9d)
0.7.2 (2023-05-17)
- add missing ischema_names entries (20e30cf)
0.7.1 (2023-05-09)
0.7.0 (2023-03-16)
- release 0.7.0 (c790424)
0.7.0-rc1 (2023-03-07)
- support sqlalchemy 2.0 (fe6be80)
- release 0.7.0-rc1 (691fdf9)
0.6.9 (2023-03-01)
0.6.8 (2023-01-08)
- correct json type mapping (7bf8753)
0.6.7 (2023-01-07)
- correct attribute reference (d2a2577)
0.6.6 (2022-12-17)
- add missing data types (92cef1b)
- add missing integer data types (c7e9ccf)
- disable server side cursors (bae0a1c)
0.6.5 (2022-11-22)
- drop python 3.6 support
- add note regarding fetchmany support in duckdb=>0.5.0 (7ccbaa9)
- add snapshottest (0b18f47)
- bump tested duckdb to 0.5.1 in tox.ini (da71828)
- declare shared test dependencies (e43823c)
- fix requirement declaration (e3923ee)
- test against 0.5.1 (0aca52e)
- drop python 3.6 support (0d81998)
- release 0.6.5 (52eca6f)
0.6.4 (2022-09-11)
- bump locked duckdb version (1a83643)
0.6.3 (2022-09-08)
- add schema support to get_view_names (b58bf32)
- correct get_view_names for older sqlalchemy (b58bf32)
- repin duckdb & poetry (#400) (4586852)
0.6.2 (2022-08-25)
- fix bleeding edge duckdb for exceptions changes (f955264)
0.6.1 (2022-08-23)
- support boolean and integer config values (4a2c639)
0.6.0 (2022-08-21)
- allow preloading of extensions (13a92e1)
- document preload_extensions config parameter (c0f2a99)
- link to example of IPython-SQL usage (96e8bdf)
0.5.0 (2022-08-19)
- support unsigned integer types (a69a35b)
- try to fix poetry installation in workflow (db21892)
- mention unsigned integer support in README (4e403cb)
0.4.0 (2022-08-15)
- switch to first party sqlalchemy stubs (cf9f626)
- support ping on latest sqlalchemy (bd63122)
0.3.4 (2022-08-12)
0.3.3 (2022-08-06)
- add code coverage reporting (019b61c)
- add documentation and test for duckdb config (f3e577a)
- correct dialect error lookup for bleeding edge (0e04d02)
0.3.2 (2022-08-05)
- unpin numpy for python 3.6 (3e87509)
0.3.1 (2022-08-05)
0.3.0 (2022-08-02)
- use SingletonThreadPool for :memory: connections (58ef77a)
0.2.0 (2022-07-03)
- add missing apilevel and threadsafety attributes on duckdb DBAPI (bc413a3)
- add release-please config (6e9a2d7)
- add support for Binary (8235377)
- enable relationship integrity (f41bd10)
- improve release script (bcb17bf)
- override driver name (1a7bb4e)
- strip comments from generated sql (66265a2)
- warn when we find comments in the ddl (5b27a7f)
- enable updating of existing models (14a4d5f)
0.1.12a0 (2022-06-23)
- feat: enable interval support by @Mause in https://github.com/leonardovida/duckdb-sqlalchemy/pull/278
- fix: use modern dialect registration by @Mause in https://github.com/leonardovida/duckdb-sqlalchemy/pull/280
- chore: add release script by @Mause in https://github.com/leonardovida/duckdb-sqlalchemy/pull/276
- Update and rename release.ps1 to release.sh by @Mause in https://github.com/leonardovida/duckdb-sqlalchemy/pull/287
- feat: add duckdb_version test decorator by @Mause in https://github.com/leonardovida/duckdb-sqlalchemy/pull/272
- chore: add links to bug tracker and changelog by @Mause in https://github.com/leonardovida/duckdb-sqlalchemy/pull/282
- feature/bug report template by @Mause in https://github.com/leonardovida/duckdb-sqlalchemy/pull/285
- feat: Create CODE_OF_CONDUCT.md by @Mause in https://github.com/leonardovida/duckdb-sqlalchemy/pull/284
- chore(deps): bump duckdb from 0.3.4 to 0.4.0 by @dependabot in https://github.com/leonardovida/duckdb-sqlalchemy/pull/273
- chore(deps): update github/codeql-action action to v1.1.13 by @renovate in https://github.com/leonardovida/duckdb-sqlalchemy/pull/279
- chore(deps): update github/codeql-action action to v1.1.14 by @renovate in https://github.com/leonardovida/duckdb-sqlalchemy/pull/286