From: Frank B. <fb...@fo...> - 2003-11-09 14:25:29
|
Hallo, I have a problem with my Webware/SQLObject application again. :( It's a webshop running Webware and using SQLObject. If I click like a mad scientist on Mozilla's Reload-button I am able to crash the Webware server. The error I get is: ... File "/usr/lib/python2.2/site-packages/SQLObject/DBConnection.py", line 168, in _iterSelect cursor.execute(query) File "/usr/lib/python2.2/site-packages/MySQLdb/cursors.py", line 61, in execute r = self._query(query) File "/usr/lib/python2.2/site-packages/MySQLdb/cursors.py", line 168, in _query rowcount = self._BaseCursor__do_query(q) File "/usr/lib/python2.2/site-packages/MySQLdb/cursors.py", line 112, in __do_query db.query(q) OperationalError: (2013, 'Lost connection to MySQL server during query') /home/fbar/webware/workdir/AppServer: line 9: 5395 Segmentation fault /usr/bin/env python2.2 Launch.py ThreadedAppServer $* This happens with using python2.2 mysqldb 0.9.1 (the Debian package) as well as with python2.3-mysqldb 0.9.2 and SQLObject CVS or 0.5. Did anybody here run into something like this before and/or does someone have an idea, what to do against this? If this happens, I get stale Webware threads, which makes automatic restarting a bit of a hassle. ciao -- Frank Barknecht _ ______footils.org__ |
From: Ian B. <ia...@co...> - 2003-11-09 18:28:05
|
On Nov 9, 2003, at 8:25 AM, Frank Barknecht wrote: > This happens with using python2.2 mysqldb 0.9.1 (the Debian package) > as well as with python2.3-mysqldb 0.9.2 and SQLObject CVS or 0.5. Did > anybody here run into something like this before and/or does someone > have an idea, what to do against this? If this happens, I get stale > Webware threads, which makes automatic restarting a bit of a hassle. Could this be related to the problem people are discussing with MiddleKit and MySQL on the Webware list? I don't really have any further thoughts, but maybe you should bounce this off them too. -- Ian Bicking | ia...@co... | http://blog.ianbicking.org |
From: Frank B. <fb...@fo...> - 2003-11-09 20:28:28
|
Hallo, Ian Bicking hat gesagt: // Ian Bicking wrote: > On Nov 9, 2003, at 8:25 AM, Frank Barknecht wrote: > >This happens with using python2.2 mysqldb 0.9.1 (the Debian package) > >as well as with python2.3-mysqldb 0.9.2 and SQLObject CVS or 0.5. Did > >anybody here run into something like this before and/or does someone > >have an idea, what to do against this? If this happens, I get stale > >Webware threads, which makes automatic restarting a bit of a hassle. > > Could this be related to the problem people are discussing with > MiddleKit and MySQL on the Webware list? I don't really have any > further thoughts, but maybe you should bounce this off them too. Well, the problem discussed on webware-devel has two differences: the error message is another one ("too many connections") and it seems to only happen with mysqldb 0.9.2, whereas my problem also occurs on 0.9.1. Of course it might still be related. Searching the web, I found two possible reasons. One is related to MySQL doing slow DNS lookups, but that isn't the case on my machines: TCP connect to mysql is disabled. The other thing seems to be related to DB-connections not getting closed or garbage-collected. But this is a quite bit over my Pythonic head and my insight into SQLObject. ciao -- Frank Barknecht _ ______footils.org__ |
From: Frank B. <fb...@fo...> - 2003-11-10 10:26:02
|
Hallo, Stephan Diehl hat gesagt: // Stephan Diehl wrote: > I've seen this as well (I think there was already a discussion a while back > about this). I'm using my own object wrapper, so it's safe to say that it has > nothing to do with SQLObjects or MiddleKit. > But, I've only see the MySQL error early mornings, so I concluded that some > stale connection might be the reason. What I find a bit worrying is that you > get a segfault as well. > Have you tried to build the python client mysqlstuff from source? Tried now, but it didn't help. I might have to live with this problem, but then I would need a way to restart the AppServer with a "kill -9 allAppServerPIDs" beforehand automatically... ciao -- Frank Barknecht _ ______footils.org__ |
From: Thomas E J. <mo...@ca...> - 2003-11-10 18:00:09
|
On Mon, 2003-11-10 at 05:25, Frank Barknecht wrote: > Hallo, > Stephan Diehl hat gesagt: // Stephan Diehl wrote: > > > I've seen this as well (I think there was already a discussion a while back > > about this). I'm using my own object wrapper, so it's safe to say that it has > > nothing to do with SQLObjects or MiddleKit. > > But, I've only see the MySQL error early mornings, so I concluded that some > > stale connection might be the reason. What I find a bit worrying is that you > > get a segfault as well. > > Have you tried to build the python client mysqlstuff from source? > > Tried now, but it didn't help. I might have to live with this problem, > but then I would need a way to restart the AppServer with a "kill -9 > allAppServerPIDs" beforehand automatically... The only way I found to prevent these stale connections is to explicitly build a new one for every group of DB operations. That of course throws away any connection pooling you can do. You may also want to look at David Rushby's resilient DBPool and see if you can make more progress than I in implementing a MySQL version. The message can be found here: http://sourceforge.net/mailarchive/message.php?msg_id=5761200 -- Thomas E Jenkins <mo...@ca...> |
From: Frank B. <fb...@fo...> - 2003-11-10 18:29:54
|
Hallo, Thomas E Jenkins hat gesagt: // Thomas E Jenkins wrote: > On Mon, 2003-11-10 at 05:25, Frank Barknecht wrote: > > Tried now, but it didn't help. I might have to live with this problem, > > but then I would need a way to restart the AppServer with a "kill -9 > > allAppServerPIDs" beforehand automatically... > > The only way I found to prevent these stale connections is to explicitly > build a new one for every group of DB operations. That of course throws > away any connection pooling you can do. You may also want to look at > David Rushby's resilient DBPool and see if you can make more progress > than I in implementing a MySQL version. The message can be found here: > http://sourceforge.net/mailarchive/message.php?msg_id=5761200 Well, I'm using SQLObject, so I'm dependent on SQLObject's pooling (maybe this can be switched off, though, I didn't look). I'm really considering to switch to Postgresql now, which is possible thanks to the abstraction provided by SQLObject, but it still would be a major step. I'm wondering, if this could help, or if I'd just take my problems to another backend... ?! ciao -- Frank Barknecht _ ______footils.org__ |
From: Ian B. <ia...@co...> - 2003-11-10 18:47:39
|
On Nov 10, 2003, at 12:29 PM, Frank Barknecht wrote: > Well, I'm using SQLObject, so I'm dependent on SQLObject's pooling > (maybe this can be switched off, though, I didn't look). I'm really > considering to switch to Postgresql now, which is possible thanks to > the abstraction provided by SQLObject, but it still would be a major > step. I'm wondering, if this could help, or if I'd just take my > problems to another backend... ?! A little while ago Luke Opperman posted (on the SQLObject list) a little recipe to use Webware's DBPool with SQLObject. Maybe you could use that together with the resilient DBPool. It would be nice to move that into SQLObject as well, since SQLObject pools would be pretty easy to make database-specific (which I think this pooling would have to be, since there's no DBAPI standard for pinging, which I think is necessary for this resilience). But I'd have to look more closely at this stuff to be sure what the appropriate implementation is on the SQLObject side. -- Ian Bicking | ia...@co... | http://blog.ianbicking.org |
From: Thomas E J. <mo...@ca...> - 2003-11-10 18:48:47
|
On Mon, 2003-11-10 at 13:29, Frank Barknecht wrote: > Hallo, > Thomas E Jenkins hat gesagt: // Thomas E Jenkins wrote: > > The only way I found to prevent these stale connections is to explicitly > > build a new one for every group of DB operations. That of course throws > > away any connection pooling you can do. You may also want to look at > > David Rushby's resilient DBPool and see if you can make more progress > > than I in implementing a MySQL version. The message can be found here: > > http://sourceforge.net/mailarchive/message.php?msg_id=5761200 > > Well, I'm using SQLObject, so I'm dependent on SQLObject's pooling > (maybe this can be switched off, though, I didn't look). I'm really > considering to switch to Postgresql now, which is possible thanks to > the abstraction provided by SQLObject, but it still would be a major > step. I'm wondering, if this could help, or if I'd just take my > problems to another backend... ?! Postgres definitely does not exhibit this behavior. Since I inherited a lot of databases I have a fair mix of both MySQL and Postgres. I struggled for a long time with MySQL lost connection problems hanging the app server, however once I switched all the MySQL operations to use built on demand connections the problems have disappeared completely. For the Postgres DBs I still use connection sharing leaving an odd mix of both. -- Thomas E Jenkins <mo...@ca...> |
From: Frank B. <fb...@fo...> - 2003-11-10 18:52:57
|
Hallo, Thomas E Jenkins hat gesagt: // Thomas E Jenkins wrote: > Postgres definitely does not exhibit this behavior. Since I inherited a > lot of databases I have a fair mix of both MySQL and Postgres. I > struggled for a long time with MySQL lost connection problems hanging > the app server, however once I switched all the MySQL operations to use > built on demand connections the problems have disappeared completely. > For the Postgres DBs I still use connection sharing leaving an odd mix > of both. This is good to hear. I think, I will try to migrate to Postgres. (Now I only have to find out how or if Postgres can be made to accept CSV-data imports with floats using a comma as decimal divider...) ciao -- Frank Barknecht _ ______footils.org__ |
From: Ben P. <be...@we...> - 2003-11-10 20:23:32
|
> -----Original Message----- > From: web...@li... > [mailto:web...@li...]On Behalf Of Frank > Barknecht > Sent: Monday, November 10, 2003 10:53 AM > To: 'Webware discuss' > Subject: Re: [Webware-discuss] 'Lost connection to MySQL server during > query' > > > Hallo, > Thomas E Jenkins hat gesagt: // Thomas E Jenkins wrote: > > > Postgres definitely does not exhibit this behavior. Since I inherited a > > lot of databases I have a fair mix of both MySQL and Postgres. I > > struggled for a long time with MySQL lost connection problems hanging > > the app server, however once I switched all the MySQL operations to use > > built on demand connections the problems have disappeared completely. > > For the Postgres DBs I still use connection sharing leaving an odd mix > > of both. > > This is good to hear. I think, I will try to migrate to Postgres. > (Now I only have to find out how or if Postgres can be made to accept > CSV-data imports with floats using a comma as decimal divider...) > This problem could be a server timeout. mysql has a default 8-hour timeout for inactive connections. Do these errors occur after about 8 hours of inactivity? You can read more here: http://www.mysql.com/doc/en/Gone_away.html - Ben |
From: Frank B. <fb...@fo...> - 2003-11-10 21:37:07
|
Hallo, Ben Parker hat gesagt: // Ben Parker wrote: > This problem could be a server timeout. mysql has a default 8-hour timeout > for inactive connections. Do these errors occur after about 8 hours of > inactivity? No, I can crash it directly after the start. It's more a problem of too much activity. Although I would not consider one person hammering the reload button by hand "overload". It also while doing simple reading operations: some select, or even the same select. Webware seems to collect all these, I get high CPU load and then Webware crashes because MySQLdb crashes with above error. ciao -- Frank Barknecht _ ______footils.org__ |
From: Ian B. <ia...@co...> - 2003-11-10 20:35:44
|
On Nov 10, 2003, at 12:48 PM, Thomas E Jenkins wrote: > Postgres definitely does not exhibit this behavior. Since I inherited > a > lot of databases I have a fair mix of both MySQL and Postgres. I > struggled for a long time with MySQL lost connection problems hanging > the app server, however once I switched all the MySQL operations to use > built on demand connections the problems have disappeared completely. > For the Postgres DBs I still use connection sharing leaving an odd mix > of both. FWIW, my understanding is that MySQL connections are quick to make and you don't gain much from pooling (at least if the server is on the same host as the client). So it might not be so bad to avoid pooling connections entirely. I know this isn't true for a lot of other databases, and I don't know much time Postgres connections take, but maybe other people have run their own experiments (e.g., running a thousand simple queries, once with a single connection and another time with new connections for each query). -- Ian Bicking | ia...@co... | http://blog.ianbicking.org |
From: Frank B. <fb...@fo...> - 2003-11-10 21:45:23
|
Hallo, Ian Bicking hat gesagt: // Ian Bicking wrote: > FWIW, my understanding is that MySQL connections are quick to make and > you don't gain much from pooling (at least if the server is on the same > host as the client). So it might not be so bad to avoid pooling > connections entirely. I know this isn't true for a lot of other > databases, and I don't know much time Postgres connections take, but > maybe other people have run their own experiments (e.g., running a > thousand simple queries, once with a single connection and another time > with new connections for each query). Is this possible (easily) with SQLObject? I naively tried the keyword argument "pool=0" but that didn't work. ;) Or do I need to inherit my own connection? BTW: I found this in the MySQLdb patch repository: http://c0re.23.nu/c0de/misc/MySQL-python-0.9.2-cyclicref.patch I also tried it with mysqldb 0.9.2, but it didn't solve the problem. ciao -- Frank Barknecht _ ______footils.org__ |
From: Ian B. <ia...@co...> - 2003-11-10 21:59:03
|
On Nov 10, 2003, at 3:45 PM, Frank Barknecht wrote: > Hallo, > Ian Bicking hat gesagt: // Ian Bicking wrote: > >> FWIW, my understanding is that MySQL connections are quick to make and >> you don't gain much from pooling (at least if the server is on the >> same >> host as the client). So it might not be so bad to avoid pooling >> connections entirely. I know this isn't true for a lot of other >> databases, and I don't know much time Postgres connections take, but >> maybe other people have run their own experiments (e.g., running a >> thousand simple queries, once with a single connection and another >> time >> with new connections for each query). > > Is this possible (easily) with SQLObject? I naively tried the keyword > argument "pool=0" but that didn't work. ;) Or do I need to inherit my > own connection? Yes, you'll need to subclass MySQLConnection. I can't remember the exactly method, but it's something like getConnection() (and the sister method for returning a connection to the pool). -- Ian Bicking | ia...@co... | http://blog.ianbicking.org |
From: Ian B. <ia...@co...> - 2003-11-11 07:03:03
|
On Nov 10, 2003, at 2:35 PM, Ian Bicking wrote: > FWIW, my understanding is that MySQL connections are quick to make and > you don't gain much from pooling (at least if the server is on the > same host as the client). So it might not be so bad to avoid pooling > connections entirely. I know this isn't true for a lot of other > databases, and I don't know much time Postgres connections take, but > maybe other people have run their own experiments (e.g., running a > thousand simple queries, once with a single connection and another > time with new connections for each query). During entirely unrelated browsing I came upon the Psycopg homepage, and noted that it does pooling as part of the driver, so DBPool or any other pooling of psycopg connections should not be necessary. I would presume that psycopg knows enough to get rid of bad connections in its internal pool. So that covers the big two databases (at least the big two for me). -- Ian Bicking | ia...@co... | http://blog.ianbicking.org |
From: Aaron H. <aa...@me...> - 2003-11-10 20:14:09
|
Sorry, I had the same problem with pgSQL a little over a year ago. I'm a fan of Postgres and have had million row tables, but you will get the same connection issue. -Aaron Frank Barknecht wrote: >Hallo, >Thomas E Jenkins hat gesagt: // Thomas E Jenkins wrote: > > > >>On Mon, 2003-11-10 at 05:25, Frank Barknecht wrote: >> >> >>>Tried now, but it didn't help. I might have to live with this problem, >>>but then I would need a way to restart the AppServer with a "kill -9 >>>allAppServerPIDs" beforehand automatically... >>> >>> >>The only way I found to prevent these stale connections is to explicitly >>build a new one for every group of DB operations. That of course throws >>away any connection pooling you can do. You may also want to look at >>David Rushby's resilient DBPool and see if you can make more progress >>than I in implementing a MySQL version. The message can be found here: >>http://sourceforge.net/mailarchive/message.php?msg_id=5761200 >> >> > >Well, I'm using SQLObject, so I'm dependent on SQLObject's pooling >(maybe this can be switched off, though, I didn't look). I'm really >considering to switch to Postgresql now, which is possible thanks to >the abstraction provided by SQLObject, but it still would be a major >step. I'm wondering, if this could help, or if I'd just take my >problems to another backend... ?! > >ciao > > |
From: Thomas E J. <mo...@ca...> - 2003-11-10 20:27:25
|
On Mon, 2003-11-10 at 15:14, Aaron Held wrote: > Sorry, > I had the same problem with pgSQL a little over a year ago. I'm a fan > of Postgres and have had million row tables, but you will get the same > connection issue. I'm guessing it must be harder to expose this error in postgres since I have converted databases from mysql to postgres and seen the problem disappear. Not that I do not believe you. -- Thomas E Jenkins <mo...@ca...> |
From: Aaron H. <aa...@me...> - 2003-11-11 15:56:20
|
Actually you are correct, I thought about this last night and remembered that the app in question was losing its connection to the database due to the firewall configuration. It was fixed by convincing the sysadmin that his firewall needs to let idle connections from the webserver to the db server stay open. The result was the same though, dbPool tries to use a connection that it thinks is still open, but in reality is closed. -Aaron Thomas E Jenkins wrote: >On Mon, 2003-11-10 at 15:14, Aaron Held wrote: > > >>Sorry, >>I had the same problem with pgSQL a little over a year ago. I'm a fan >>of Postgres and have had million row tables, but you will get the same >>connection issue. >> >> > >I'm guessing it must be harder to expose this error in postgres since I >have converted databases from mysql to postgres and seen the problem >disappear. Not that I do not believe you. > > > |
From: Frank B. <fb...@fo...> - 2003-11-10 21:40:29
|
Hallo, Aaron Held hat gesagt: // Aaron Held wrote: > Sorry, > I had the same problem with pgSQL a little over a year ago. I'm a fan > of Postgres and have had million row tables, but you will get the same > connection issue. So, may I ask: What did you do then? I mean, lots of us need (and use) databases in the back, and it seems, that "normally" it just works. ciao -- Frank Barknecht _ ______footils.org__ |
From: Aaron H. <aa...@me...> - 2003-11-11 15:54:09
|
Here is my ugly work-around: I had a midnight script that would import shut down webware, start up another instance of webware that would put up a 'System undergoing update, back in xxxminutes', then it would drop the indexes, import 250k records, delete 250k records, rebuild indexes and vaccum static. after that it would restart webware. The app NEEDS indexes to work and the import took much too w/ indexes so this was the only approach to get it up the next day. -Aaron Frank Barknecht wrote: >Hallo, >Aaron Held hat gesagt: // Aaron Held wrote: > > > >>Sorry, >>I had the same problem with pgSQL a little over a year ago. I'm a fan >>of Postgres and have had million row tables, but you will get the same >>connection issue. >> >> > >So, may I ask: What did you do then? I mean, lots of us need (and use) >databases in the back, and it seems, that "normally" it just works. > >ciao > > |
From: Ian B. <ia...@co...> - 2003-11-11 17:18:59
|
On Nov 11, 2003, at 9:54 AM, Aaron Held wrote: > Here is my ugly work-around: > > I had a midnight script that would import shut down webware, start up > another instance of webware that would put up a 'System undergoing > update, back in xxxminutes', > then it would drop the indexes, import 250k records, delete 250k > records, rebuild indexes and vaccum static. > after that it would restart webware. > > The app NEEDS indexes to work and the import took much too w/ indexes > so this was the only approach to get it up the next day. I think the Postgres docs suggest that COPY (COPY FROM?) is the proper way to do these imports, because they don't update indexes -- I think there may be some other optimizations for delete as well. I don't remember the details, but I'm sure the Postgres docs say more. -- Ian Bicking | ia...@co... | http://blog.ianbicking.org |
From: Leith P. <le...@sl...> - 2003-11-10 23:13:40
|
Hi, This is similair to a problem i am experciencing using the DBPool and PostGresQL. Using the pyPgSQL module, i get connections that begin to go IDLE in SELECT and IDLE in TRANSACTION when viewed via the 'ps' util. The DBPool seems to be able to recover from this during the course of normal operations, however during the weekly full VACUUM everyone seems to reach a dead lock, effectively hanging the AppServer until it is kill 9'ed and restarted. Any ideas on how to work around this? Regards Leith Aaron Held wrote: > Sorry, > I had the same problem with pgSQL a little over a year ago. I'm a fan > of Postgres and have had million row tables, but you will get the same > connection issue. > > -Aaron > > Frank Barknecht wrote: > >> Hallo, >> Thomas E Jenkins hat gesagt: // Thomas E Jenkins wrote: >> >> >> >>> On Mon, 2003-11-10 at 05:25, Frank Barknecht wrote: >>> >>> >>>> Tried now, but it didn't help. I might have to live with this problem, >>>> but then I would need a way to restart the AppServer with a "kill -9 >>>> allAppServerPIDs" beforehand automatically... >>>> >>> >>> The only way I found to prevent these stale connections is to >>> explicitly >>> build a new one for every group of DB operations. That of course >>> throws >>> away any connection pooling you can do. You may also want to look at >>> David Rushby's resilient DBPool and see if you can make more progress >>> than I in implementing a MySQL version. The message can be found here: >>> http://sourceforge.net/mailarchive/message.php?msg_id=5761200 >>> >> >> >> Well, I'm using SQLObject, so I'm dependent on SQLObject's pooling >> (maybe this can be switched off, though, I didn't look). I'm really >> considering to switch to Postgresql now, which is possible thanks to >> the abstraction provided by SQLObject, but it still would be a major >> step. I'm wondering, if this could help, or if I'd just take my >> problems to another backend... ?! >> >> ciao >> >> > > > > > ------------------------------------------------------- > This SF.Net email sponsored by: ApacheCon 2003, > 16-19 November in Las Vegas. Learn firsthand the latest > developments in Apache, PHP, Perl, XML, Java, MySQL, > WebDAV, and more! http://www.apachecon.com/ > _______________________________________________ > Webware-discuss mailing list > Web...@li... > https://lists.sourceforge.net/lists/listinfo/webware-discuss > |
From: Frank B. <fb...@fo...> - 2003-11-28 19:14:02
|
Hallo, Aaron Held hat gesagt: // Aaron Held wrote: > I had the same problem with pgSQL a little over a year ago. I'm a fan > of Postgres and have had million row tables, but you will get the same > connection issue. Late answer, but this week the shop I developed finally went (or had to go, x-mas is coming) online, and the connection errors with MySQL went through the roof. After that I decided to actually do the change to to PostgreSQL, and now everything seems to run smoothly, at least the first two days. I still don't know why I was getting all these errors with MySQL, as I know that many rather big sites are quite happy with it. But my confidence in MySQL has gone to hell. Welcome back, PostgreSQL. Oh, and for those interested: The shop lives at http://normalmailorder.de/shop/ all running with Webware and SQLObject. ciao -- Frank Barknecht _ ______footils.org__ |
Re: [Webware-discuss] is the new store available? was:'Lost connection
to MySQL server during query'
From: Aaron H. <aa...@me...> - 2003-12-04 15:21:27
|
Will you be releasing the newer version of the store? I'd like to see how you did the querypath translation. Thanks, -Aaron Frank Barknecht wrote: >Hallo, >Aaron Held hat gesagt: // Aaron Held wrote: > > > >>I had the same problem with pgSQL a little over a year ago. I'm a fan >>of Postgres and have had million row tables, but you will get the same >>connection issue. >> >> > >Late answer, but this week the shop I developed finally went (or had >to go, x-mas is coming) online, and the connection errors with MySQL >went through the roof. After that I decided to actually do the change >to to PostgreSQL, and now everything seems to run smoothly, at least >the first two days. I still don't know why I was getting all these >errors with MySQL, as I know that many rather big sites are quite >happy with it. But my confidence in MySQL has gone to hell. Welcome >back, PostgreSQL. > >Oh, and for those interested: The shop lives at >http://normalmailorder.de/shop/ all running with Webware and >SQLObject. > >ciao > > |
Re: [Webware-discuss] is the new store available? was:'Lost connection to MySQL server during query'
From: Frank B. <fb...@fo...> - 2003-12-04 16:19:18
|
Hallo, Aaron Held hat gesagt: // Aaron Held wrote: > Will you be releasing the newer version of the store? I'm not sure yet, as it is in parts quite specific. > I'd like to see how you did the querypath translation. I will however release things like my Cart.py, that are of a more general use, to the ww-sandbox as GPL. Interestingly the QueryBuilder class I used already was released as a post to the sqlobject list. It's a bit evolved since then, but the basic functionality is complete in this old mail by me: --- old mail: So, and to give something back, here's my QueryBuilder class that's intended to be used with Webware's extraPathInfo and automates searching via the extra-URL: ### snip ### from SQLObject import * class QueryBuilder(object): def __init__(self, table, url=""): self.__url = url self.__sql = None self.__conds = {} self._table = table self._cols = self._table._SO_columnDict.keys() id url: self.parse() def set_url(self, url): self.__url = url self.parse() def get_sql(self): query = None for colName, ops in self.__conds.items(): for op in ops: subquery = LIKE(getattr(self._table.q, colName), "%%%s%%" % op) if colName == "id": subquery = self._table.q.id == op if query: query = AND(query, subquery) else: query = subquery return query def parse(self): cols = self._cols cols.append("id") u = self.__url.split("/") l = len(u) i = 0 conds = {} last = None while i < l: if last and u[i]: conds[last] = conds.get(last, []) conds[last].append(u[i]) last = None elif u[i] in cols: last = u[i] i += 1 self.__conds = conds url = property(None, set_url, None, "URL property, write only") sql = property(get_sql, None, None, "SQL property, read only") ### snip ### Not that elegant, but working fine for "flat" databases. It's used like this: # Product is an SQLObject with attrs: name, title, description,... q = QueryBuilder(Product) q.url = "name/potter/name/harry/description/book/foo/bar/" print q.sql print "Number of results: %d " % len (table.select(q.sql)) for n in list(table.select(q.sql)[0:10]): print "%s: %s" % (n.name, n.title) Have fun, -- Frank Barknecht _ ______footils.org__ |