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.

Reply via email to