SQLObject 0.8.0

Oleg Broytmann phd at phd.pp.ru
Mon Feb 12 18:09:14 CET 2007


I'm pleased to announce the 0.8.0 release of SQLObject.

What is SQLObject

SQLObject is an object-relational mapper.  Your database tables are described
as classes, and rows are instances of those classes.  SQLObject is meant to be
easy to use and quick to get started with.

SQLObject supports a number of backends: MySQL, PostgreSQL, SQLite, and
Firebird.  It also has newly added support for Sybase, MSSQL and MaxDB (also
known as SAPDB).

Where is SQLObject



Mailing list:



News and changes:

What's New

News since 0.7

Features & Interface

* It is now possible to create tables that reference each other.
  Constraints (in the DBMSes that support constraints) are added after the
  tables have been created.

* Added ``createSQL`` as an option for sqlmeta. Here you can add
  related SQL you want executed by sqlobject-admin create after table
  creation. createSQL expects a string, list, or dictionary. If using
  a dictionary the key should be a dbName value (ex. 'postgres') and
  the value should be a string or list.  Examples in
  sqlobject/tests/test_sqlobject_admin.py or at

* Added method ``sqlhub.doInTransaction(callable, *args, **kwargs)``,
  to be used like::

      sqlhub.doInTransaction(process_request, os.environ)

  This will run ``process_request(os.environ)``.  The return
  value will be preserved.

* Added method ``.getOne([default])`` to ``SelectResults`` (these are
  the objects returned by ``.select()`` and ``.selectBy()``).  This
  returns a single object, when the query is expected to return only
  one object.  The single argument is the value to return when zero
  results are found (more than one result is always an error).  If no
  default is given, it is an error if no such object exists.

* Added a WSGI middleware (in ``sqlobject.wsgi_middleware``) for
  configuring the database for the request.  Also handles
  transactions.  Available as ``egg:SQLObject`` in Paste Deploy
  configuration files.

* New joins! ManyToMany and OneToMany; not fully documented yet, but still
  more sensible and smarter.


* New module dberrors.py - a hierarchy of exceptions. Translation of DB API
  module's exceptions to the new hierarchy is performed for SQLite and MySQL.

* SQLiteConnection got a new keyword "factory" - a name or a reference to
  a factory function that returns a connection class; useful for
  implementing functions or aggregates. See test_select.py and
  test_sqlite_factory.py for examples.

* SQLObject now disallows columns with names that collide with existing
  variables and methods, such as "_init", "expire", "set" and so on.

Small Features

* Configurable client character set (encoding) for MySQL.

* Added a close option to .commit(), so you can close the transaction as
  you commit it.

* DecimalValidator.

* Added .expireAll() methods to sqlmeta and connection objects, to expire
  all instances in those cases.

* String IDs.


* Support for sqlite3 (a builtin module in Python 2.5).

* SelectResults cannot be queried for truth value; in any case it was
  meaningless - the result was always True; now __nonzero__() raises
  NotImplementedError in case one tries bool(MyTable.select()) or
  "if MyTable.select():..."

* With empty parameters AND() and OR() returns None.

* Allows to use set/frozenset sets/Set/ImmutableSet sets as sequences
  passed to the IN operator.

* ID columns are now INT UNSIGNED for MySQL.

Bug Fixes

* Fixed problem with sqlite and threads; connections are no longer shared
  between threads for sqlite (except for :memory:).

* The reference loop between SQLObject and SQLObjectState eliminated using
  weak references.

* Another round of bugfixes for MySQL errors 2006 and 2013 (SERVER_GONE,

* Fixed a bug in MSSQLConnection caused by column names being unicode.

* Fixed a bug in FirebirdConnection caused by column names having trailing

* Order by several columns with inheritance.

* Fixed aggregators and accumulators with inheritance.

For a more complete list, please see the news:

     Oleg Broytmann            http://phd.pp.ru/            phd at phd.pp.ru
           Programmers don't die, they just GOSUB without RETURN.

More information about the Python-announce-list mailing list