News and Updates

SQLAlchemy Migrates Issues from Trac to Bitbucket
permalink

The SQLAlchemy project is now using Bitbucket for all issue tracking and wiki pages.

SQLAlchemy began using Bitbucket some years ago for pull requests, and then when the move to Git was made, Bitbucket became the originating point for the git main, which remains mirrored on SQLAlchemy's host as well as on Github. However, the issue system has for SQLAlchemy's entire life remained hosted on Trac.

A move from Trac to another system like Github or Bitbucket was not feasable until Bitbucket added an advanced import/export feature which could maintain the full history, timestamps, and user accounts of the imported issues. When this feature was introduced, the SQLAlchemy project still was reluctant to give up full control over its issue tracker, instead enabling full user account tools and adding such features as tracvatar (used by the Fedora project!) to improve the user interface. But ultimately spammers started abusing the system, and the spam tools provided with Trac were failing to deter them in any way, and more generally didn't seem to work at all; an alternate plugin was installed to provide captcha support to the registration page, but spam accounts continued to register daily despite it. The account database in Trac amassed several hundred accounts, mostly inactive, any number of which might also be spam accounts. As the SQLAlchemy project has no interest being in the business of maintaining user account databases, the impetus to move became clear. An additional advantage is that the issue system is no longer throttled to crawlers, who were also a nuisance on SQLAlchemy's very low power host.

After two weeks of effort to produce import/export tools as well as to develop various utilities and workarounds for some issues encountered with Bitbucket (most notably, that its system marks every issue and comment not owned by you as spam after an import is done, meaning you have to un-mark them all), the issue system has been moved entirely. SQLAlchemy's host is now used to serve the main website and for the Jenkins main (which is also non-public to deter crawlers from slowing it down).

SQLAlchemy 0.9.2 Released
permalink

SQLAlchemy release 0.9.2 is now available.

Release 0.9.2, while only a "point release" in the new 0.9 series, contains a large list of bug and regression fixes across ORM, Core and dialect, as well as a significant number of new features, particularly in the area of database metadata management.

Features include a "naming convention" system for database metadata that is hoped to assist with schema management, including when using Alembic migrations, as well as new options for constraints, Postgresql table reflection, and copying of table metadata. Support and documentation has been improved for some advanced ORM patterns such as creating relationships to complex targets.

The release also features a lot of regression fixes, so is recommended for all users who have already upgraded to the 0.9 series.

Among other bugfixes, there are quite a few dialect-specific bug fixes including four for MySQL alone, as well as Oracle, Postgresql, MSSQL, and SQLite, as well as a good number of ORM fixes.

Full changelog for SQLAlchemy 0.9.2 is at Changes, and for an overview of what's new in SQLAlchemy 0.9 overall, see What's New in 0.9.

Download SQLAlchemy 0.9.2 on the Download Page.

SQLAlchemy 0.9.1 Released
permalink

SQLAlchemy release 0.9.1 is now available.

This release is primarily a quick-hit regression release; as we moved fast through 0.9 betas only releasing a single beta, a couple of small regressions popped up since then; this release fixes those.

The release does however include one major, though experimental feature. After spending many hours on IRC with a particular user's use case of automatically generating relationship() objects for an existing schema, a new extension is proposed known as sqlalchemy.ext.automap. Automap expands upon the Declarative model as well as the "deferred reflection" class to attempt producing a full model at runtime based on a reflected, or otherwise non-mapped, schema collection. In some ways, Automap can more or less replace what the very famous SQLSoup extension has historically been used for, e.g. to generate classes on the fly based on a reflected schema. Automap expands on this idea by proposing simple logic to also generate rudimentary relationships between classes, and also is structured so as to interoperate smoothly with the Declarative mapping system that didn't exist when SQLSoup was created.

Full changelog for SQLAlchemy 0.9.1 is at Changes, and for an overview of what's new in SQLAlchemy 0.9 overall, see What's New in 0.9.

Download SQLAlchemy 0.9.1 on the Download Page.

SQLAlchemy 0.9.0 Released
permalink

SQLAlchemy release 0.9.0 is now available.

After about a year's worth of development, 0.9.0 is the first official release of the 0.9 series of SQLAlchemy. As always, 0.9 includes many major architectural improvements and new features.

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.

Highlights of SQLAlchemy 0.9.0 include in-place Python 3 support, major improvements to the eager loading system including a more expressive API and critical performance improvements to the rendering of more complex joins, support for Postgresql JSON types, SQL expression improvements such as textual "selectable" objects, "INSERT from SELECT" support, improved APIs for "SELECT..FOR UPDATE", schema and DDL improvements, and many other refinements. Architecturally, the move to Python 3 in place has allowed lots of consolidation to take place, and there has also been a major reorganization of module layout both within Core and ORM.

Existing production deployments which have not yet been tested in SQLAlchemy 0.9.0 should ensure that they specify a version less than 0.9.0 in their requirements files, as version 0.9.0 now becomes the default version of SQLAlchemy downloaded from Pypi when no version specifics are given.

Full changelog for the SQLAlchemy 0.9 series is at Changes; this document will also link out in many cases to the migration document mentioned above.

Download SQLAlchemy 0.9.0 on the Download Page.

SQLAlchemy 0.8.4 Released
permalink

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.