sharing objects between classes

G

Gerardo Herzig

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
 
D

Diez B. Roggisch

Gerardo said:
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
 
B

Bruno Desthuilliers

Diez B. Roggisch a écrit :
(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 !-)
 
G

gherzig

Diez B. Roggisch a écrit :
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,776
Messages
2,569,603
Members
45,189
Latest member
CryptoTaxSoftware

Latest Threads

Top