[PonyORM-list] Pony ORM Releases 0.7.4 & 0.7.5

Alexander Kozlovsky alexander.kozlovsky at gmail.com
Thu Jul 26 13:57:32 UTC 2018

 Hi all!

In these releases we add support of Python 3.7 and PyPy. Also we changed
PonyORM internals significantly in order to add two long-demanded features.
The first is hybrid methods and properties
<https://docs.ponyorm.com/entities.html#hybrid-methods-and-properties>. Now
it is possible to define one-line method or property in entity class and
use it inside declarative queries. This way it is possible to re-use
complex expressions between different queries:

class Person(db.Entity):
    first_name = Required(str)
    last_name = Required(str)
    country = Required(str)
    age = Required(int)

    def full_name(self):
        return self.first_name + self.last_name

    def is_adult(self):
        return self.age > 18


query = select(p for p in Person if p.is_adult)

The second feature is the possibility to base query on a previous query.
This way it is possible to construct complex queries gradually. In previous
versions of Pony it was possible to add conditions by using query.filter

query2 = query.filter(lambda person: person.country == 'USA')

but query.filter function cannot change the result type of query. Now you
have full flexibility for making your query:

query3 = select(x.full_name for x in query2 if x.last_name.startswith('A'))

Implementing this two features was not easy, because SQL and Python have
different namespace rules, and mapping Python name to SQL aliases is a
non-trivial task for complex queries.

Also we added a pony.flask subpackage wich provide integration with Flask
<https://docs.ponyorm.com/integration_with_flask.html>, so extensions like
Flask-Login can work with Pony.

>From now on we will concentrate on migration tool and hopefully release it

Here is the detailed changelog:
Pony ORM Release 0.7.4 (2018-07-23)Major features

   - Hybrid methods and properties
   - Allow to base queries on another queries: select(x.a for x in
   prev_query if x.b)
   - Added support of Python 3.7
   - Added support of PyPy
   - group_concat() aggregate function added
   - pony.flask subpackage added for integration with Flask

Other features

   - distinct option added to aggregate functions
   - Support of explicit casting to float and bool in queries


   - Apply @cut_traceback decorator only when pony.MODE is ‘INTERACTIVE’


   - In SQLite3 LIKE is case sensitive now
   - #249 <https://github.com/ponyorm/pony/issues/249>: Fix incorrect mixin
   used for Timedelta
   - #251 <https://github.com/ponyorm/pony/issues/251>: correct dealing
   with qualified table names
   - #301 <https://github.com/ponyorm/pony/issues/301>: Fix aggregation
   over JSON Column
   - #306 <https://github.com/ponyorm/pony/issues/306>: Support of
   frozenset constants added
   - #308 <https://github.com/ponyorm/pony/issues/308>: Fixed an error when
   assigning JSON attribute value to the same attribute: obj.json_attr =
   - #313 <https://github.com/ponyorm/pony/issues/313>: Fix missed retry on
   exception raised during db_session.__exit__
   - #314 <https://github.com/ponyorm/pony/issues/314>: Fix AttributeError:
   ‘NoneType’ object has no attribute ‘seeds’
   - #315 <https://github.com/ponyorm/pony/issues/315>: Fix attribute
   lifting for JSON attributes
   - #321 <https://github.com/ponyorm/pony/issues/321>: Fix KeyError on
   - #325 <https://github.com/ponyorm/pony/issues/325>: duplicating
   percentage sign in raw SQL queries without parameters
   - #331 <https://github.com/ponyorm/pony/issues/331>: Overriding __len__in
   entity fails
   - #336 <https://github.com/ponyorm/pony/issues/336>: entity declaration
   - #357 <https://github.com/ponyorm/pony/issues/357>: reconnect after
   PostgreSQL server closed the connection unexpectedly
   - Fix Python implementation of between() function and rename
arguments: between(a,
   x, y)-> between(x, a, b)
   - Fix retry handling: in PostgreSQL and Oracle an error can be raised
   during commit
   - Fix optimistic update checks for composite foreign keys
   - Don’t raise OptimisticCheckError if db_session is not optimistic
   - Handling incorrect datetime values in MySQL
   - Improved ImportError exception messages when MySQLdb, pymysql,
   psycopg2 or psycopg2cffi driver was not found
   - desc() function fixed to allow reverse its effect by calling
   - __contains__ method should check if objects belong to the same
   - Fix pony.MODE detection; mod_wsgi detection according to official doc
   - A lot of inner fixes

Pony ORM Release 0.7.5 (2018-07-24)Bugfixes

   - query.where and query.filter method bug introduced in 0.7.4 was fixed

Best regards,
PonyORM team
-------------- next part --------------
An HTML attachment was scrubbed...
URL: </ponyorm-list/attachments/20180726/5098e1e8/attachment-0001.html>

More information about the ponyorm-list mailing list