[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.python

sharing objects between classes

Gerardo Herzig -Departamento de Proyectos Especiales e Internet- Facultad de Medicina

1/28/2008 3:27:00 PM

Hi all. Im wondering the way to share a database connection between some
classes:

So far, i came up with a simple class schema, where each class means
each different relation, i mean i have the follow classes

class Database(object):
## make the connection
self.conn = make_conn(....)

class Table(object):
def get_fields:
....

And at this point i dont know how to use the Database.conn attribute,
since the get_fields method will perform a query over the given database.
At first, i just define the Table class as a inner class of Database,
but if i try a
class Database(object):
## make the connection
def __init__(self):
self.conn = sql_connect(....)
self.table = Table('foo')

class Table(object): ## inner class
def get_fields(self, name):
....

I get a "NameError: global name 'Table' is not defined".

So, which would the right pattern to use here? Using a global module? I
dont know why, but i dont like that idea too much.

Any comments will be appreciated!
Thanks!

Gerardo

3 Answers

Diez B. Roggisch

1/28/2008 3:30:00 PM

0

Gerardo Herzig wrote:

> Hi all. Im wondering the way to share a database connection between some
> classes:
>
> So far, i came up with a simple class schema, where each class means
> each different relation, i mean i have the follow classes
>
> class Database(object):
> ## make the connection
> self.conn = make_conn(....)
>
> class Table(object):
> def get_fields:
> ....
>
> And at this point i dont know how to use the Database.conn attribute,
> since the get_fields method will perform a query over the given database.
> At first, i just define the Table class as a inner class of Database,
> but if i try a
> class Database(object):
> ## make the connection
> def __init__(self):
> self.conn = sql_connect(....)
> self.table = Table('foo')
>
> class Table(object): ## inner class
> def get_fields(self, name):
> ....
>
> I get a "NameError: global name 'Table' is not defined".
>
> So, which would the right pattern to use here? Using a global module? I
> dont know why, but i dont like that idea too much.
>
> Any comments will be appreciated!
> Thanks!

Take a look at the sources of e.g. SQLObject and how they do it (in SO, the
concept is called "HUB")

Essentially, you set a reference to a global connection object that itself
isn't a simple global but useses threading.local to have one connection per
thread. Then you can access that connection transparently.

Diez

Bruno Desthuilliers

1/28/2008 5:09:00 PM

0

Diez B. Roggisch a écrit :
> Gerardo Herzig wrote:
>
>> Hi all. Im wondering the way to share a database connection between some
>> classes:
>>
>> So far, i came up with a simple class schema, where each class means
>> each different relation, i mean i have the follow classes
>>
>> class Database(object):
>> ## make the connection
>> self.conn = make_conn(....)
>>
>> class Table(object):
>> def get_fields:
>> ....
>>
(snip)
>
> Take a look at the sources of e.g. SQLObject and how they do it (in SO, the
> concept is called "HUB")
>
And while you're at it, take a look at SQLAlchemy too, and ask yourself
if you really need to roll your own solution !-)

Gerardo Herzig -Departamento de Proyectos Especiales e Internet- Facultad de Medicina

1/28/2008 6:00:00 PM

0

> Diez B. Roggisch a écrit :
>> Gerardo Herzig wrote:
>>
>>> Hi all. Im wondering the way to share a database connection between
>>> some
>>> classes:
>>>
>>> So far, i came up with a simple class schema, where each class means
>>> each different relation, i mean i have the follow classes
>>>
>>> class Database(object):
>>> ## make the connection
>>> self.conn = make_conn(....)
>>>
>>> class Table(object):
>>> def get_fields:
>>> ....
>>>
> (snip)
>>
>> Take a look at the sources of e.g. SQLObject and how they do it (in SO,
>> the
>> concept is called "HUB")
>>
> And while you're at it, take a look at SQLAlchemy too, and ask yourself
> if you really need to roll your own solution !-)

Yes, i dont need to reinvent the wheel, i know, it just seems like a
pattern i will have to deal with, not just in this case. SQLObject seems
like a big peace of code to read. At least to me (not that good
programmer).

I will take a look at SQLAlchemy, and see a little more.
Thanks!

Gerardo