After much development effort and plenty of beta testing, version 0.4 of SQLAlchemy is released. For those who haven't been following along, this release represents several months of refactorings, rewrites, API reorganizations, and re-documenting of virtually every area of SQLAlchemy's functionality. A handful of core developers and dozens of contributors have helped this release to broadly address many areas, including:
- major code simplifications and optimizations within the SQL expression API, execution system, and ORM
- rewritten SQL compiler which allows inlined column defaults, deterministic generation of anonymous alias and label names, unicode identifier support, and dialect-sensitive operator generation; it's also nearly twice as fast
- almost completely rewritten documentation, with two new tutorials.
- a much more powerful and smart SQL expression API
- a much simplified, consistent, and capable Query object
- high level ORM query operations, such as aliased joins, self-referential joins, operators like any() and has(), without the need for explicit Table/Alias usage
- much better integration of transaction control with ORM sessions
- core ORM support for vertical and horizontal table partitioning across multiple databases
- vastly improved mapper configurations, including a comprehensive collections API, simple polymorphic inheritance configuration, composite datatypes comprised of multiple columns, "dynamic" class attributes which query and filter subsets of large collections
- support for SAVEPOINT and two-phase transactions
- more database support, including Postgres' "UPDATE..RETURNING" syntax, Mysql's "UPDATE..LIMIT" syntax, PG array types, new dialects for Sybase and MS Access
If you haven't looked at SQLAlchemy lately, this is the release to look at...we've really pulled out all the stops on this one.