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

Reply via email to