Storm (software)

From Wikipedia, the free encyclopedia
Jump to: navigation, search
Developer(s) Canonical Ltd.
Stable release
0.20 / June 28, 2013; 3 years ago (2013-06-28)
Development status Active
Written in Python
Operating system Cross-platform
Type Object-relational mapping
License LGPL 2.1

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.[1]


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[2] Version control is done in bazaar and issue tracking in Launchpad.

Version Release Date Improvements[3]
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 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

See also[edit]


  1. ^ Storm codebase in bzr. Retrieved on 24 May 2012
  2. ^ Canonical's contributor agreement Retrieved 24 May 2012
  3. ^ Storm Developers. "Launch Pad". 2006-07-17. Retrieved on 24 May 2012

External links[edit]