The changelog has only been started with version 0.3.12, previous changes must be reconstructed from revision history.
- 2.0.0: Major modernization and type annotations
- Type annotations: Full
mypy --strictcompliance across all modules - PEP 561: Added
py.typedmarker for downstream type checking - New types: Exported
OutRow,RowFactory,QueryErrorfor downstream use RowFactory: Therow_typeparameter is now typed asCallable[[Iterable[tuple[str, Any]]], OutRow]instead oftypeQueryError: New exception subclass ofDatasetErrorfor invalid filter operationsprimary_type: Changed fromTypestoColumnType(SQLAlchemyTypeEngine) — the actual accepted typeinsert/insert_ignore/upsert: Return type changed fromint | booltoAny(primary keys can be any type)- Removed
banaldependency: Replacedensure_listwith typedensure_stringsutility update_many: Fixed mutation of input rows — rows are now copied before modification- Dev tooling: Added
mypyto dev dependencies,make lintnow runs both ruff and mypy - Build system: Migrated from setuptools to modern pyproject.toml with Hatchling (PEP 621)
- Linting: Replaced flake8 with ruff for faster, more comprehensive linting
- CI/CD: Updated GitHub Actions to use modern action versions (checkout@v4, setup-python@v5)
- SQLAlchemy 2.x: Full support for SQLAlchemy 2.0+ with backward compatibility to 1.4.0
- Transaction handling: Fixed autobegin semantics and DDL lock contention for SQLAlchemy 2.x
- Testing: Switched from nose to pytest, improved test fixtures and cleanup
- Database support: Added lock timeout configurations for PostgreSQL and MySQL in CI
- Python support: Now requires Python 3.10+, tested on 3.10-3.13
- Documentation: Updated installation instructions, copyright year, and added comprehensive CLAUDE.md
- Metadata: Changed development status from Alpha to Production/Stable
- License: Renamed LICENSE.txt to LICENSE for standard convention
- Dependencies: Updated SQLAlchemy constraint to allow versions up to 3.0.0
- Type annotations: Full
- 1.6.2: Fix distinct() to respect _limit and _offset parameters (#424).
- 1.6.1: Fix add_column method compatibility with Alembic 1.11+ (#423).
- 1.6.0: Pin SQLAlchemy below 2.0.0 for compatibility.
- 1.5.2: Consider primary key when checking for indexes (#382). Add missing arguments for query method (#391).
- 1.5.1: Improve row conversion compatibility across SQLAlchemy 1.3 and 1.4.
- 1.5.0: Add support for custom SQLite pragmas via
on_connect_statementsparameter. Switch from nose to pytest for testing. - 1.2.0: Add support for views, multiple comparison operators. Remove support for Python 2.
- 1.1.0: Introduce
typessystem to shortcut for SQLA types. - 1.0.0: Massive re-factor and code cleanup.
- 0.6.0: Remove sqlite_datetime_fix for automatic int-casting of dates, make table['foo', 'bar'] an alias for table.distinct('foo', 'bar'), check validity of column and table names more thoroughly, rename reflectMetadata constructor argument to reflect_metadata, fix ResultIter to not leave queries open (so you can update in a loop).
- 0.5.7: dataset Databases can now have customized row types. This allows, for example, information to be retrieved in attribute-accessible dict subclasses, such as stuf.
- 0.5.4: Context manager for transactions, thanks to @victorkashirin.
- 0.5.1: Fix a regression where empty queries would raise an exception.
- 0.5: Improve overall code quality and testing, including Travis CI. An advanced getitem syntax which allowed for the specification of primary keys when getting a table was dropped. DDL is no longer run against a transaction, but the base connection.
- 0.4: Python 3 support and switch to alembic for migrations.
- 0.3.15: Fixes to update and insertion of data, thanks to @cli248 and @abhinav-upadhyay.
- 0.3.14: dataset went viral somehow. Thanks to @gtsafas for refactorings, @alasdairnicol for fixing the Freezfile example in the documentation. @diegoguimaraes fixed the behaviour of insert to return the newly-created primary key ID. table.find_one() now returns a dict, not an SQLAlchemy ResultProxy. Slugs are now generated using the Python-Slugify package, removing slug code from dataset.
- 0.3.13: Fixed logging, added support for transformations on result rows to support slug generation in output (#28).
- 0.3.12: Makes table primary key's types and names configurable, fixing #19. Contributed by @dnatag.