ZSQL method and database connection acquisition.
Hi context: Zope 2.3.2 (source release, python 1.5.2, linux2) Python 1.5.2 (#1, Feb 1 2000, 16:32:16) [GCC egcs-2.91.66 19990314/Linux (egcs- Platform linux-i386 ZMySQLDA 2.0.0 Making zope acquire the database connection appears to be slightly cumbersome. I have a folder X with many ZSQLMethods inside it. To add these I had to add a connection object to folder X before hand. However I have other folders say test1 and test2 in which I place a database connection with the same id but connecting to different databases. I am have the same schema in two databases, so I want to group the sql all together and then use the differing connections in different folders to manipulate the data differently. so we have (as a minimum) /X containing dbconn ; a 'fake' database connection a_sql_method ; uses dbconn /test1 dbconn ; a database connection to database1 /test2 dbconn ; a database connection to database2 Now once this is all set up you have to delete the /X/dbconn. (If you rename it though, the connection_id in the sql_method changes as well, which makes the calls from the test1/2 folders break). So delete it you must. and then using the magic of acquistion call /X/test1/a_sql_method and this queries on database1 and /X/test2/a_sql_method and this queries database2 However if you want to add any more sql methods into the X folder or modify an existing one, zope requires that there be an existing database connection in that folder. This seems to go against the spirit of acquistion. If the connection is not visible in that folder the only thing that shouldnt work is the 'test' tab. The SQL method and the database connection seem too tightly coupled to me. any ideas? any fixes? I'll try on 2.4.x the minute I get the mysql-python and python 2.1 built. Jon
jon@totient.demon.co.uk writes:
I have a folder X with many ZSQLMethods inside it. To add these I had to add a connection object to folder X before hand.
However I have other folders say test1 and test2 in which I place a database connection with the same id but connecting to different databases. I am have the same schema in two databases, so I want to group the sql all together and then use the differing connections in different folders to manipulate the data differently.
so we have (as a minimum)
/X containing dbconn ; a 'fake' database connection a_sql_method ; uses dbconn /test1 dbconn ; a database connection to database1
/test2 dbconn ; a database connection to database2
Now once this is all set up you have to delete the /X/dbconn. (If you rename it though, the connection_id in the sql_method changes as well, which makes the calls from the test1/2 folders break). So delete it you must.
and then using the magic of acquistion call
/X/test1/a_sql_method
and this queries on database1
and /X/test2/a_sql_method
and this queries database2 I used a ZClass to solve a similar problem:
I defined the Z SQL method as a ZClass method. That this works, I had to add a fake (non-working) Database Connection in the product folder containing the ZClass. I then create instances of the ZClass whereever I need them. The Z SQL method will use the Database Connection in the respective acquisition context (and not the on in the product folder). Dieter
participants (2)
-
Dieter Maurer -
jon@totient.demon.co.uk