Hi, Pony ORM developer here. We just get first public attention today, so I 
don't think there are many
experienced Pony ORM users exist at this moment (April 2013) ;-)

I think that currently Pony ORM is suitable for experiments, but probably 
not for immediate in-production usage.
Currently Pony ORM is a great toy, and during the next few months we must 
implement several tasks in order
to get complete product. For example, we must add support of Psycopg2 
PostgreSQL driver (currently we work
with PostgreSQL via PyGreSQL which is not as popular as Psycopg2). This is 
not hard, but just takes some time.
Also, we must add migration support (and its implementation will be really 
cool, we plan to get migrations
automatically from diagram changes in visual diagram editor).

I expect Pony ORM will be fully production-ready a few months later.

Regarding to benefits of using Pony ORM, I think its mainly in higher level 
of abstraction. With Pony, you can
write query to database as if you write simple python generator to iterate 
over ordinary python list of objects.
So, you can do something like this

    orders = select(o for o in Order if o.date_shipped.year == 2012)

And you get optimized SQL query which return list of order objects. You can 
pass this objects between
several layers of you application, and when some of this objects are 
updated, Pony ORM accumulates
these updates and then send changes to database on commit() execution.

The main architectural difference between Pony ORM and SQLAlchemy is this: 
SQLAlchemy based
on relational data model, and can write queries to relational databases 
only, whereas Pony ORM
internally based on "entity-relationship" model which is independent of 
SQL. So, in the future, Pony ORM
could be used with NoSQL databases such as MongoDB. But currently only SQL 
databases are supported.

So, at the current time the main difference between Pony ORM and SALAlchemy 
is that SQLAlchemy
queries are more verbose. For example, this is Pony ORM query:

    select(o for o in Order if o.date_shipped.year == 2012)

And this is equivalent SQLAlchemy query (did't test it):

    session.query(Order).filter(extract("year", Order.date_shipped) == 2012)

This is really the matter of taste and personal preferences, so no critique 
here.
SQLAlchemy is great ORM, but I just forget correct query syntax every time 
:)
I hear from many people that they cannot handle SQLAlchemy "complexity",
so maybe Pony ORM will be good choice for them.

-- 
You received this message because you are subscribed to the Google Groups 
"web.py" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to webpy+unsubscr...@googlegroups.com.
To post to this group, send email to webpy@googlegroups.com.
Visit this group at http://groups.google.com/group/webpy?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to