On Sunday 27 October 2002 07:17 am, Michael Montagne wrote: > How do I pass an SQL statement containing joins of different classes > to MySQLObjectStore? It appears I can only return rows from one > table using fetchObjectsOfClass. Are all updates to tables intended > to be through the classes rather than using straight SQL or is it > possible to both ways?
Hi Michael, I typically just fetch objects of a class and then follow their relationships via their obj ref and list attributes. I prefer this approach because I think of my system in terms of objects. However, MK doesn't stop you from accessing the database. You could do something like: store.executeSQL('select userId from User, Department where ...') and then loop through each userId with store.fetchObject('User', id). Or even get more columns of data and use it directly, for special cases. You'll want to read the doc string for executeSQL() in MiddleKit/Run/SQLObjectStore.py. So far, I have only used executeSQL for things like "select count(*)" and updating some non-MK SQL tables that happened to be in the same db. Although, lately I have been thinking that it might be useful if the list accessor methods took clauses arguments and returned new lists when using them. I haven't tried that yet. I don't know how useful this will be, but here is an actual grep of "clauses=" in StockAlerts.com: Dev/Core/Delivery.py:251: templates = store.fetchObjectsOfClass(templateType, clauses=whereClause) Dev/Core/Delivery.py:330: templates = store.fetchObjectsOfClass(templateType, clauses=whereClause) Dev/Core/Holiday.py:18: #holiday = store.fetchObjectsOfClass('Holiday', clauses="where date='%s'") % string.split(str(DateTime.now()))[0] Dev/Core/MessageGenerator.py:148: clauses="where (watchType='%s' or watchType is null) and (whatFor is null" % klass.name() Dev/Core/MessageGenerator.py:156: return store.fetchObjectsOfClass('Template', clauses=clauses) Dev/Core/UniqueString.py:66: strings = store.fetchObjectsOfClass('UniqueString', clauses='where s=%r' % s) Dev/Core/User.py:204: def _fetchSubobjects(self, aClass, where=None, moreClauses=''): Dev/Core/User.py:210: return self.store().fetchObjectsOfClass(aClass, clauses=clauses) Dev/Core/VacationDay.py:15: #vacation = fetchObjectsOfClass('VacationDay', clauses="where date='%s'") % string.split(str(DateTime.now()))[0] Dev/Utils/UsersReport.py:92: self.users = self.store.fetchObjectsOfClass('User', clauses=clauses) Dev/Utils/OptimizeMK/Change.py:43: klass.objs = store.fetchObjectsOfClass(klass, clauses='limit %i'%self.maxObjsPerKlass) Dev/Web2/Tools/SitePage.py:347: users = store.fetchObjectsOfClass('User', clauses='where cookie=%r' % userCookie) Dev/Web2/Tools/SitePage.py:366: prefs = store.fetchObjectsOfClass('Preferences', clauses='where login=%r' % userName) Dev/Web2/Tools/SitePage.py:369: contacts = store.fetchObjectsOfClass('ContactInfo', clauses='where eMail=%r' % userName) Dev/Web2/Tools/SitePage.py:471: #ubbUsers = store.fetchObjectsOfClass('w3t_Users', clauses='WHERE user = %d' % user) Dev/Web2/Pages/Account/EditEmail.py:58: objs = self.store.fetchObjectsOfClass('ContactInfo', clauses='where eMail=%r' % email) Dev/Web2/Pages/Account/EditLogin.py:57: objs = self.store.fetchObjectsOfClass('Preferences', clauses='where login=%r' % login) Dev/Web2/Pages/Account/EditNickname.py:55: ubbUsers = self.store.fetchObjectsOfClass('Preferences', clauses='WHERE nickname = "%s"' % nickname) Dev/Web2/Pages/Account/EditNickname.py:74: ubbUsers = self.store.fetchObjectsOfClass('Preferences', clauses='WHERE nickname = "%s"' % nickname) Dev/Web2/Pages/Admin/Find.py:130: objs = self.store.fetchObjectsOfClass(className, clauses='where %s %s '%(attrName, condition)) Dev/Web2/Pages/Admin/Main.py:39: infos = self.store.fetchObjectsOfClass('AccountInfo', clauses='where isAdmin=1') Dev/Web2/Pages/Destinations/Delete.py:8: deliveries = self.store.fetchObjectsOfClass('Delivery', clauses='where deviceId=%s' % self.device.sqlObjRef()) Dev/Web2/Pages/Destinations/View.py:54: messages = self.store.fetchObjectsOfClass('Message', clauses=clauses) Dev/Web2/Pages/Portfolios/Delete.py:11: watches = fetch('StockWatch', clauses='where inPortfolioId=%s and not derived' % portRef) Dev/Web2/Pages/Portfolios/Delete.py:12: watches.extend(fetch('PortfolioWatch', clauses='where portfolioId=%s' % portRef)) Dev/Web2/Pages/Portfolios/Delete.py:14: reports = fetch('PortfolioReport', clauses='where portfolioId=%s' % portRef) Dev/Web2/Pages/Register/Cancel.py:40: infos = self.store.fetchObjectsOfClass('AccountInfo', clauses='where cancelCode=%r' % code) Dev/Web2/Pages/Register/Main.py:407: objs = self.store.fetchObjectsOfClass('ContactInfo', clauses='where eMail=%r' % input) Dev/Web2/Pages/Register/Main.py:486: if self.store.fetchObjectsOfClass('Preferences', clauses='where nickname=%r' % input): Dev/Web2/Pages/Reports/View.py:77: messages = self.store.fetchObjectsOfClass('Message', clauses=clauses) Dev/Web2/Pages/Watches/ViewObject.py:83: messages = self.store.fetchObjectsOfClass('Message', clauses=clauses) Hope that helps, -Chuck ------------------------------------------------------- This sf.net email is sponsored by:ThinkGeek Welcome to geek heaven. http://thinkgeek.com/sf _______________________________________________ Webware-discuss mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/webware-discuss