object-relational mappers

Luis M. González luismgz at gmail.com
Thu Apr 3 11:34:24 EDT 2008


On 3 abr, 11:06, Bruno Desthuilliers <bruno.
42.desthuilli... at websiteburo.invalid> wrote:
> Luis M. González a écrit :
>
> > I have come to the same conclusion.
> > ORMs make easy things easier, but difficult things impossible...
>
> Not my experience with SQLAlchemy. Ok, I still not had an occasion to
> test it against stored procedures, but when it comes to complex queries,
> it did the trick so far - and (warning: front-end developper
> considerations ahead) happened to be much more usable than raw strings
> to dynamically *build* the queries.
>
> > The best approach I've seen so far is webpy's (if we are talking of
> > web apps).
> > It isn't an ORM, it is just a way to make the database api easier to
> > use.
> > Queries don't return objects, they return something similar to
> > dictionaries, which can be used with dot notation ( for example,
> > result.name is equal to result['name'] ).
>
> > A simple select query would be db.select('customers') or
> > db.select('customers', name='John').
> > But you can also resort to plain sql as follows: db.query('select *
> > from customers where name = "John"').
>
> > Simple, effective and doesn't get in your way.
>
> Seems nice too in another way. Is that part independant of the rest of
> the framework ? If so, I'll have to give it a try at least for admin
> scripts.

Yes, webpy's db api can be used in stand-alone scripts if you want.
See below:

import web
db = web.database(dbn='mysql', db='northwind', user='root')
x = db.select('employees')

for i in x:
    print i.FirstName, i.LastName
    ...

Another good thing is that, since queries return Storage objects
(similar to dictionaries), they are much more flexible.
Suppose that you get the results of a form sent via a POST method, and
you want to insert this data into your database.
You would simple write:

i = web.input()
db.insert('orders', **i)


So everything related to CRUD operations are is easy to do, without
having to mess with objects.
I think this sticks strictly to the KISS principle, keeping it simple,
with less overhead, less layers of abstraction and therefore, less
bugs and complications.
And it matchs perfectly webpy's philosofy for creating web apps.

Luis



More information about the Python-list mailing list