# Storm (software)

Storm is a Python programming library for object-relational mapping between one or more SQL databases and Python objects. It allows Python developers to formulate complex queries spanning multiple database tables to support dynamic storage and retrieval of object information.
MySQL, PostgreSQL and SQLite database support is built into Storm, and the API allows for support for others. Storm also supports the Django and Zope web frameworks natively. Twisted support is planned for the .20 release.

## Development

Storm was developed at Canonical Ltd. in Python for use in the Launchpad and Landscape applications and subsequently released in 2007 as free software. The project is free software and released under the GNU Lesser General Public License and contributors are required to assign copyrights to Canonical. Version control is done in bazaar and issue tracking in Launchpad.
| Version | Release Date | Improvements |
| Storm 0.21 | TBD | In development as of 2013 |
| Storm 0.20 | 28 Jun 2013 | A new CaptureTracer has been added to storm.testing. Setuptools is now required to run setup.py. This makes it easier to install dependencies required to run the test suite. PostgreSQL disconnection errors are now more reliably detected. Insert expressions now support multi-row and subquery INSERT statements. Support in the postgres backend to use the RETURNING extension for UPDATE, optionally specifying columns to return. Add a Distinct expression for pre-pending 'DISTINCT' to SQL expressions. Switch to REPEATABLE READ as isolation level for Postgres. Add support for two-phase commits (PostgreSQL only). ZStormResourceManager now has a schema_stamp_dir optional instance attribute, so schema upgrades will be performed only when needed. |
| Storm 0.19 | 05 Oct 2011 | The storm.zope.testing.ZStormResourceManager supports using a custom URI. ResultSet.config's "distinct" argument accepts a tuple of columns. Provide wrapped cursor objects in Django integration layer. Add a new JSON property, new ROW constructor, new Cast expressions, and two new tracers. New storm.twisted.transact module added. |
| Storm 0.18 | 25 Oct 2010 | Include code to manage and migrate database schemas. Added a storm.zope.testing.ZStormResourceManager class to manage a set of stores registered. When a TimeoutError is raised it includes a description about why the exception was raised. Improved the IResultSet interface to document the rationale of why some attributes are not included. |
| Storm 0.17 | 05 Aug 2010 | ResultSet and ReferenceSet are reworked and improved. The Store and Connection classes have block_access and unblock_access methods. ZStormError will be raised on attempts to use a per-thread store from the wrong thread. |
| Storm 0.16 | 29 Nov 2009 | The set expression constructor will now flatten its first argument if it is of the same type. Add startswith, endswith and contains_string methods to Comparable. C extensions are enabled by default. 'make doc' uses Pydoctor to generate API documentation. |
| Storm 0.15 | 08 Aug 2009 | Add support for latest version on Django by not checking arguments passed to _cursor. New GenerationalCache, UUID property type, Neg expression, and Coalese expressions were added. Improved DisconnectionError reporting. Results/ResultSets now expose more. |
| Storm 0.14 | 09 Jan 2009 | A new storm.django package has been added. The Store constructor takes an optional cache keyword argument, ResultSets now offer an is_empty method. |
| Storm 0.13 | 28 Aug 2008 | Add group_by/having methods on ResultSet objects. Change tests/store to keep the connection during the tests. Implemented support for plugging generic "tracers". Properties now accept a "validator" parameter. Expressions can be passed to Store.find as well as classes. Objects are flushed in the order they become dirty. ClassAlias caches all explicitly named aliases. Result sets and reference sets now have a __contains__ method. |
| Storm 0.12 | 28 Jan 2008 | The Connection will reconnect automatically when drops are detected. Store.flush will not load values inserted in the database Support in the postgres backend to use the RETURNING extension. Introduced a cache mechanism that keeps the N last retrieved objects in memory. Improved support for TimeDelta properties on all backends. |
| Storm 0.11 | 08 Oct 2007 | Minor bug fixing release. |
| Storm 0.10 | 08 Aug 2007 | Bug fixes, feature enhancements, documentation! |
| Storm 0.9 | 06 Jul 2007 | |