You need to copy the keyedtuples into some other data structure, like a dictionary, modify it, then send that data back into updates. Your best bet is to use the bulk update stuff once you have those dictionaries, see http://docs.sqlalchemy.org/en/latest/orm/session_api.html?highlight=bulk#sqlalchemy.orm.session.Session.bulk_update_mappings .
On Fri, Aug 10, 2018, 1:28 PM James Couch <zanr...@gmail.com> wrote: > Hey all. Long time lurker, first time poster. > > I'm using sqlalchemy ORM. We have a fairly decent sized data set, and one > table has a pretty large number of columns, some of them with foreignkeys. > I found that limiting a query to specific columns speeds up the time it > takes to come back with a result by quite a bit (like 100x faster for this > one table, talking like over a second to just a few milliseconds > difference). > > So I have a query that goes something like this: > > q = dbsession.query( > Host.hostname, > Host.platform, > Host.ostype, > Host.buildstatus, > Host.created_on, > Host.created_by, > Host.modified_by, > Host.jobrunid).filter(Host.buildstatus != None).all() > > I then pass that result through a few functions to validate/update some of > the fields. Problem is, I could do this on a regular Query result (q = > dbsession.query(Host).filter(Host.buildstatus != None).all()) but the > results I get back from this optimized query as posted above, I can't > modify those values, I get "AttributeError: can't set attribute". > > I've been Googling this and searching through these posts, but I guess I > don't know the right terms to search on. I can't find anything in the > documentation talking about how to modify the results of a KeyedTuple query. > > Normally I would do something like: > > for x in q: > if pingresult(x.hostname) is False: > x.buildstatus = 'removed' > dbsession.commit() > dbsession.close() > > But if q is a set of KeyedTuples, this won't work. > > What's the speediest way to accomplish this task? Should I just stick to > querying all the columns (....query(Host)...) and just take the performance > hit? > > -- > SQLAlchemy - > The Python SQL Toolkit and Object Relational Mapper > > http://www.sqlalchemy.org/ > > To post example code, please provide an MCVE: Minimal, Complete, and > Verifiable Example. See http://stackoverflow.com/help/mcve for a full > description. > --- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to sqlalchemy+unsubscr...@googlegroups.com. > To post to this group, send email to sqlalchemy@googlegroups.com. > Visit this group at https://groups.google.com/group/sqlalchemy. > For more options, visit https://groups.google.com/d/optout. > -- SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper http://www.sqlalchemy.org/ To post example code, please provide an MCVE: Minimal, Complete, and Verifiable Example. See http://stackoverflow.com/help/mcve for a full description. --- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at https://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.