PyGreSQL Changelog

What's new in PyGreSQL 4.1.1

Sep 12, 2014
  • Add WhenNotified class and method. Replaces need for third party pgnotify.
  • Sharpen test for inserting current_timestamp.
  • Add more quote tests. False and 0 should evaluate to NULL.
  • More tests - Any number other than 0 is True.
  • Do not use positional parameters internally. This restores backward compatibility with version 4.0.
  • Add methods for changing the decimal point.

New in PyGreSQL 4.1 (Sep 12, 2014)

  • Dropped support for Python below 2.5 and PostgreSQL below 8.3.
  • Added support for Python up to 2.7 and PostgreSQL up to 9.2.
  • Particularly, support PQescapeLiteral() and PQescapeIdentifier().
  • The query method of the classic API now supports positional parameters. This an effective way to pass arbitrary or unknown data without worrying about SQL injection or syntax errors (contribution by Patrick TJ McPhee).
  • The classic API now supports a method namedresult() in addition to getresult() and dictresult(), which returns the rows of the result as named tuples if these are supported (Python 2.6 or higher).
  • The classic API has got the new methods begin(), commit(), rollback(), savepoint() and release() for handling transactions.
  • Both classic and DBAPI 2 connections can now be used as context managers for encapsulating transactions.
  • The execute() and executemany() methods now return the cursor object, so you can now write statements like "for row in cursor.execute(...)" (as suggested by Adam Frederick).
  • Binary objects are now automatically escaped and unescaped.
  • Bug in money quoting fixed. Amounts of $0.00 handled correctly.
  • Proper handling of date and time objects as input.
  • Proper handling of floats with 'nan' or 'inf' values as input.
  • Fixed the set_decimal() function.
  • All DatabaseError instances now have a sqlstate attribute.
  • The getnotify() method can now also return payload strings (#15).
  • Better support for notice processing with the new methods set_notice_receiver() and get_notice_receiver() (as suggested by Michael Filonenko, see #12 and #37).
  • Open transactions are rolled back when pgdb connections are closed (as suggested by Peter Harris, see #46).
  • Connections and cursors can now be used with the "with" statement (as suggested by Peter Harris, see #46).
  • New method use_regtypes() that can be called to let getattnames() return regular type names instead of the simplified classic types (#44).

New in PyGreSQL 4.0 (Mar 9, 2009)

  • Dropped support for Python below 2.3 and PostgreSQL below 7.4.
  • Improved performance of fetchall() for large result sets by speeding up the type casts (as suggested by Peter Schuller).
  • Exposed exceptions as attributes of the connection object.
  • Exposed connection as attribute of the cursor object.
  • Cursors now support the iteration protocol.
  • Added new method to get parameter settings.
  • Added customizable row_factory as suggested by Simon Pamies.
  • Separated between mandatory and additional type objects.
  • Added keyword args to insert, update and delete methods.
  • Added exception handling for direct copy.
  • Release the GIL while making a connection (as suggested by Peter Schuller).
  • If available, use decimal.Decimal for numeric types.
  • Allow DB wrapper to be used with DB-API 2 connections (as suggested by Chris Hilton).
  • Made private attributes of DB wrapper accessible.
  • Dropped dependence on mx.DateTime module.
  • Support for PQescapeStringConn() and PQescapeByteaConn(); these are now also used by the internal _quote() functions.
  • Added 'int8' to INTEGER types. New SMALLINT type.
  • Added a way to find the number of rows affected by a query() with the classic pg module by returning it as a string. For single inserts, query() still returns the oid as an integer. The pgdb module already provides the "rowcount" cursor attribute for the same purpose.
  • Improved getnotify() by calling PQconsumeInput() instead of submitting an empty command.
  • Removed compatibility code for old OID munging style.
  • The insert() and update() methods now use the "returning" clause if possible to get all changed values, and they also check in advance whether a subsequent select is possible, so that ongoing transactions won't break if there is no select privilege.
  • Added "protocol_version" and "server_version" attributes.
  • Revived the "user" attribute.
  • The pg module now works correctly with composite primary keys; these are represented as frozensets.
  • Removed the undocumented and actually unnecessary "view" parameter from the get() method.
  • get() raises a nicer ProgrammingError instead of a KeyError if no primary key was found.
  • delete() now also works based on the primary key if no oid available and returns whether the row existed or not.