Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #26513 > unrolled thread

Object Models - decoupling data access - good examples ?

Started byshearichard@gmail.com
First post2012-08-04 17:04 -0700
Last post2012-08-07 15:46 +0000
Articles 6 — 4 participants

Back to article view | Back to comp.lang.python


Contents

  Object Models - decoupling data access - good examples ? shearichard@gmail.com - 2012-08-04 17:04 -0700
    Re: Object Models - decoupling data access - good examples ? Roy Smith <roy@panix.com> - 2012-08-04 21:17 -0400
      Re: Object Models - decoupling data access - good examples ? shearichard@gmail.com - 2012-08-04 20:26 -0700
        Re: Object Models - decoupling data access - good examples ? Roy Smith <roy@panix.com> - 2012-08-05 09:04 -0400
        Re: Object Models - decoupling data access - good examples ? Adam Tauno Williams <awilliam@whitemice.org> - 2012-08-07 09:00 -0400
        RE: Object Models - decoupling data access - good examples ? "Sells, Fred" <fred.sells@adventistcare.org> - 2012-08-07 15:46 +0000

#26513 — Object Models - decoupling data access - good examples ?

Fromshearichard@gmail.com
Date2012-08-04 17:04 -0700
SubjectObject Models - decoupling data access - good examples ?
Message-ID<ebb88ade-7598-46b1-8fb6-fd7f7430b296@googlegroups.com>
I'm interested in best practice approaches to : decoupling data access code from application code; and translations between database structures and domain objects.

For some time I've done database access by in a particular way and while I think it's OK it's not very pythonic so I'd be interested in hearing of other approaches - even better if there are open source examples whose code might be read.

I should say I'm talking relational database here and, for various reasons, ORMs are not involved.

So this is what I do (in a one class project call 'bar') in order to allow objects of type foo to be fetched/inserted/updated


bar/foo.py
bar/bardb/bardbConnection.py
bar/bardb/BusinessLogic/fooManager.py
bar/bardb/BusinessObject/foo.py
bar/bardb/DataAccess/fooDB.py

And this is what they actually do :


bar/foo.py
The class as the outside world knows it 

bar/bardb/bardbConnection.py
Manages database connection

bar/bardb/BusinessLogic/fooManager.py
Exposes methods used by bar/foo.py such as 'save'/'update' etc and implements necessary validation etc

bar/bardb/BusinessObject/foo.py
A collection of getters/setters which does any translation between types necessary on the way to/from the rdbms

bar/bardb/DataAccess/fooDB.py
Implements the actual SQL necessary for the relevant interactions with the database

As I say this works OK for me but I'd be interested to hear of what others do.

Thanks

Richard.

[toc] | [next] | [standalone]


#26517

FromRoy Smith <roy@panix.com>
Date2012-08-04 21:17 -0400
Message-ID<roy-C112B6.21172104082012@news.panix.com>
In reply to#26513
In article <ebb88ade-7598-46b1-8fb6-fd7f7430b296@googlegroups.com>,
 shearichard@gmail.com wrote:

> I should say I'm talking relational database here and, for various reasons, 
> ORMs are not involved.

Just out of curiosity, why do you eschew ORMs?

On the other hand, you really haven't.  All you've done is rolled your 
own.  So, the real question is, why do you want to roll your own ORM 
instead of using some existing one?

[toc] | [prev] | [next] | [standalone]


#26523

Fromshearichard@gmail.com
Date2012-08-04 20:26 -0700
Message-ID<bf551938-0b08-46d5-82be-812c3521a0cd@googlegroups.com>
In reply to#26517
 
> 
> Just out of curiosity, why do you eschew ORMs?
> 
Good question !

I'm not anti-ORM (in fact in many circs I'm quite pro-ORM) but for some time I've been working with a client who doesn't want ORMs used (they do have quite good reasons for this although probably not as good as they think). 

I was interested to know, given that was the case, how you might - in Python, go about structuring an app which didn't use an ORM but which did use a RDBMS fairly intensively.

I take your point about having "rolled my own ORM" - lol - but I can assure you what's in that 'bardb' is a pretty thin layer over the SQL and nothing like the, pretty amazing, functionality of, for instance, SQLAlchemy.


[toc] | [prev] | [next] | [standalone]


#26532

FromRoy Smith <roy@panix.com>
Date2012-08-05 09:04 -0400
Message-ID<roy-041EF6.09042405082012@news.panix.com>
In reply to#26523
In article <bf551938-0b08-46d5-82be-812c3521a0cd@googlegroups.com>,
 shearichard@gmail.com wrote:

> > Just out of curiosity, why do you eschew ORMs?
> > 
> Good question !
> 
> I'm not anti-ORM (in fact in many circs I'm quite pro-ORM) but for some time 
> I've been working with a client who doesn't want ORMs used (they do have 
> quite good reasons for this although probably not as good as they think). 

OK, I'll re-ask the question.  What are the reasons?

> I take your point about having "rolled my own ORM" - lol - but I can assure 
> you what's in that 'bardb' is a pretty thin layer over the SQL and nothing 
> like the, pretty amazing, functionality of, for instance, SQLAlchemy.

So, you're opposed to ORMs in general because you find SQLAlchemy too 
heavyweight.  I don't blame you; every time I look at SQLAlchemy, I go 
screaming in the other direction.  But, there are other ORMs. See, for 
example, http://lmgtfy.com/?q=python+orm.

[toc] | [prev] | [next] | [standalone]


#26705

FromAdam Tauno Williams <awilliam@whitemice.org>
Date2012-08-07 09:00 -0400
Message-ID<mailman.3051.1344346238.4697.python-list@python.org>
In reply to#26523

[Multipart message — attachments visible in raw view] — view raw

On Sat, 2012-08-04 at 20:26 -0700, shearichard@gmail.com wrote: 
> > 
> > Just out of curiosity, why do you eschew ORMs?
> Good question !
> I'm not anti-ORM (in fact in many circs I'm quite pro-ORM) but for
> some time I've been working with a client who doesn't want ORMs used
> (they do have quite good reasons for this although probably not as
> good as they think). 

So call the ORM something else.

> I was interested to know, given that was the case, how you might - in
> Python, go about structuring an app which didn't use an ORM but which
> did use a RDBMS fairly intensively.

You'd reinvent the ORM calling it something else - because an ORM is
what you are describing.

This is just a case of those-who-will-not-use-are-doomed-to-recreate.

> I take your point about having "rolled my own ORM" - lol - but I can
> assure you what's in that 'bardb' is a pretty thin layer over the SQL
> and nothing like the, pretty amazing, functionality of, for instance,
> >SQLAlchemy.

This implies that SQLAlchemy is 'fat'.  I don't see any evidence of
that.  It is comprehensive so when you encounter something you can be
confident it is up to the challange.

[toc] | [prev] | [next] | [standalone]


#26724

From"Sells, Fred" <fred.sells@adventistcare.org>
Date2012-08-07 15:46 +0000
Message-ID<mailman.3059.1344354475.4697.python-list@python.org>
In reply to#26523
Given that "the customer is always right": In the past I've dealt with this situation by creating one or more "query" classes and one or more edit classes.  I found it easier to separate these.

I would then create basic methods like EditStaff.add_empooyee(**kwargs)  inside of which I would drop into (in my case) MySQLdb.  In retrospect, I'm not sure that the generick use of **kwargs was a good solution in that it masked what I was passing in, requiring me to go back to the calling code when debugging.  OTOH it allowed me to be pretting generic by using
Sql = sql_template % kwargs

On the query side. I would convert the returned list of dictionaries to a list of objects using something like

Class DBrecord:
	Def __init__(self, **kwargs):
		Self.__dict__.update(kwargs)

So that I did not have to use the record['fieldname'] syntax but could use record.fieldname.

I would describe myself as more of a survivalist programmer, lacking some of the sophisticated techniques of others on the mailing list so take that into account.

Fred.

-----Original Message-----
From: python-list-bounces+frsells=adventistcare.org@python.org [mailto:python-list-bounces+frsells=adventistcare.org@python.org] On Behalf Of shearichard@gmail.com
Sent: Saturday, August 04, 2012 11:26 PM
To: python-list@python.org
Subject: Re: Object Models - decoupling data access - good examples ?

 
> 
> Just out of curiosity, why do you eschew ORMs?
> 
Good question !

I'm not anti-ORM (in fact in many circs I'm quite pro-ORM) but for some time I've been working with a client who doesn't want ORMs used (they do have quite good reasons for this although probably not as good as they think). 

I was interested to know, given that was the case, how you might - in Python, go about structuring an app which didn't use an ORM but which did use a RDBMS fairly intensively.

I take your point about having "rolled my own ORM" - lol - but I can assure you what's in that 'bardb' is a pretty thin layer over the SQL and nothing like the, pretty amazing, functionality of, for instance, SQLAlchemy.



-- 
http://mail.python.org/mailman/listinfo/python-list

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.python


csiph-web