News and Updates

SQLAlchemy 0.8.4 Released


SQLAlchemy release 0.8.4 is now available.

0.8.4 is a relatively early bugfix release, which includes one key feature critical to the recently relased 0.6.1 version of Alembic migrations.

The "reflect unique constraints" feature of 0.9 has been backported to 0.8.4. This feature, which retrieves a list of unique constraint objects from a schema, allows the new Alembic feature of autogenerate for indexes and unique constraints to function fully.

A key bugfix in 0.8.4 involves the QueuePool implementation. An issue was observed where the QueuePool implementation would block when a new connection attempt was stalled; other new connection attempts within concurrent threads would be paused until the stalled attempt completed or errored out. This issue has been resolved, as the section where new connections are created is no longer within a mutex.

The release otherwise includes a small set of minor dialect- and engine-level fixes.

Users should carefully review the Changelog to note which behaviors and issues are affected. We'd like to thank the many contributors who helped with this release.

SQLAlchemy 0.8.4 is available on the Download Page.

SQLAlchemy 0.9.0b1 Released


SQLAlchemy release 0.9.0b1 is now available.

This is the first beta release of the new 0.9 series, which features a wide array of behavioral improvements and features. It also includes all relevant bugfixes that have been applied to the 0.8 and sometimes the 0.7 series as develoment has continued. We strongly encourage users to download and evaluate 0.9.0b1, already in use in production environments, and to report back on issues promptly.

To get an overview of SQLAlchemy 0.9's new features, see the What's New in 0.9 document. This document should also serve as a guide for those behavioral changes which may require adjustments to existing applications.

Major highlights include:

  • Runs on Python 2 and 3 with no 2to3 step needed.
  • C extensions run on Python 3
  • Major improvements to SQL rendering regarding ORM eager loading
  • The event API is enhanced with the ability to remove listeners.
  • Major improvements to composite attributes, association proxies
  • New Query features including a rewritten "loader option" system with greater capabilities
  • SQL expression language and schema improvements.

The release is being offered for download via Bitbucket files and not on Pypi, so that it is not installed automatically for those users using pip, since it is still in beta.

Download SQLAlchemy 0.9.0b1 on the Download Page.

SQLAlchemy 0.8.3 Released


SQLAlchemy release 0.8.3 is now available.

0.8.3 is a bugfix release containing several dozen fixes, and a few features backported from the upcoming 0.9.0b1 release planned for the same time.

Areas of improvement include ORM, Core, and fixes for dialects like that of MySQL, Postgresql, Oracle, and SQLite.

Users should carefully review the Changelog to note which behaviors and issues are affected. We'd like to thank the many contributors who helped with this release.

SQLAlchemy 0.8.3 is available on the Download Page.

SQLAlchemy 0.8.2 Released


SQLAlchemy release 0.8.2 is now available.

0.8.2 includes several dozen bug fixes and new features, including refinement of some of the new features introduced in 0.8.

Areas of improvement include Core, ORM, as well as specific fixes for dialects such as Postgresql, MySQL, Oracle, SQL Server, Firebird and Sybase.

Users should carefully review the Changelog to note which behaviors and issues are affected. We'd like to thank the many contributors who helped with this release.

SQLAlchemy 0.8.2 is available on the Download Page.

SQLAlchemy Migrated to Git


The SQLAlchemy source repository has been migrated to Git.

There are now twin repository mirrors for SQLAlchemy hosted at Bitbucket and Github.

Rationale for the migration includes the following:

  • Git manages the size of the repository more efficiently; while the Mercurial repository has been approaching 50M in size, the Git repository is only 17M.
  • Git allows for lightweight, temporary feature branches which can be freely renamed or deleted, including that dead branches can be pruned of their changesets. The Mercurial repository had filled up with several dozen development branches, some abandoned, which while they could be hidden via "close", could never be removed. While Mercurial supports part of Git's functionality via the "bookmarks" extension, users typically are unaware of this and continue to create unwieldy branches. Bookmarks don't solve the issue of removing unused changesets in any case. Feature branches in Mercurial typically had to proceed in separate clones to allow for the possibility of abandonment without clogging up the main repository.
  • While Mercurial has various extensions which emulate advanced Git features like "rebase" and "collapse", manipulation of history for the purposes of collapsing changesets or manipulating branches is a first class and widely used feature in Git.
  • Largely due to the popularity of Github, Git has achieved a much higher userbase, to the degree where we regularly have users requesting us to move to Git so they can provide pull requests (as they don't want to learn Mercurial).

SQLAlchemy's issue repository will remain hosted on Trac; while a Git repository can be mirrored in any number of places, an issue repository cannot (for now! Can someone please create a distributed issue tracker? Should be pretty doable, though getting Github/Bitbucket to use it, not so much...), so SQLAlchemy's long history of issue discussion remains maintained directly by the project.

While we are favoring Bitbucket as the location of the "primary" push repository, users who wish to contribute should feel free to provide pull requests from either Bitbucket or Github; we should be able to accommodate both.

The SQLAlchemy Mercurial repository at will remain up for some period of time until we observe that requests have fallen off - note that this repository is not being mirrored from Git, as the repository would need to be recreated with bookmarks instead of branches which require recreating the entire revision history.