Thread: [SQLObject] Can _connection be constructed on demand?
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
From: John R. <joh...@gm...> - 2005-05-29 20:34:07
|
Hello. I have a situation in which constructing the connection URI is somewhat expernsive, sometimes requiring access to a database. (I'm using MySQL and the logic for which database within the MySQL database to use depends on what databases have already been created....) As such, I'd rather not compute the connection URI at import time, as is done in either of these two cases: __connection__=3D expensiveComputeConnectionURI() class X(SQLObject): ... # or=20 class X(SQLObject): _connection=3D expensiveComputeConnectionURI() Is there any easy way... in .0.6.1 or in SVN... to construct _connection la= zily? Is there some way to use property() to do this, or descriptors? |
From: Dryice L. <dry...@gm...> - 2005-05-30 01:34:27
|
John Reese <joh...@gm...> wrote: > As such, I'd rather not compute the connection URI at import time, as > is done in either of these two cases: Hi, I use the SQLObject classes in different process with different connection so I have some something like this and it worked for me: ConnForground =3D connectionForURI() ConnBackground =3D connectionForURI() def PrepareDB(conn): for i in AllSQLObjectClasses: i._connection =3D conn However I'm not sure if changing _connection on the fly (say, from ConnForground to ConnBackground) will causing problem.=20=20=20=20=20=20=20= =20 =2D-=20 Dryice @ http://dryice.3322.org Please avoid sending me Word or PowerPoint attachments. See http://www.gnu.org/philosophy/sylvester-response.html |
From: Kevin D. <da...@gm...> - 2005-06-01 12:17:14
|
On 5/29/05, John Reese <joh...@gm...> wrote: > class X(SQLObject): > _connection=3D expensiveComputeConnectionURI() >=20 > Is there any easy way... in .0.6.1 or in SVN... to construct _connection = lazily? Yep... You can do it using a descriptor. http://users.rcn.com/python/download/Descriptor.htm In SVN, you'll find an example of a descriptor if you look at ConnectionHub in dbconnection.py. Here's the basic idea: class Conn(object): def __get__(self): # do your expensive thing return connection class YourDataObject(SQLObject): _connection =3D Conn() Every time you retrieve _connection, your __get__ method will be called. Kevin |
From: Oleg B. <ph...@ma...> - 2005-06-01 13:37:05
|
On Wed, Jun 01, 2005 at 08:16:58AM -0400, Kevin Dangoor wrote: > Every time you retrieve _connection, your __get__ method will be called. And because of that one probably would want to cache the result of the expensive calculations. Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: John R. <joh...@gm...> - 2005-06-20 23:15:41
|
2005/6/1, Oleg Broytmann <ph...@ma...>: > On Wed, Jun 01, 2005 at 08:16:58AM -0400, Kevin Dangoor wrote: > > Every time you retrieve _connection, your __get__ method will be called= . >=20 > And because of that one probably would want to cache the result of > the expensive calculations. This works great, thanks for all the help. I've got another similar question. I've got another class like so: class X(SQLObject): _fromDatabase=3D True When I import this class, it has to connect to the database. This is undesirable for me. What can I do to have it connect lazily? One thing I was imagining was declaring the class in a function and sticking it into the module dictionary. I'm not so crazy about that. The only reason I'm declaring this class X at all is that another class, Y, let's say, has a foreign key pointing to it. |