Related note, in 1.2 I'm adding a new mechanism for loading things which is a "post load" hook, that is, a bunch of objects are loaded in a query, and then afterwards, more loaders can run on a batch of completed objects. The effect looks similar to how "subqueryload" works right now, except "subqueryload" fires off within the initial population step of the objects. The two kinds of loaders using this are the "select IN" loading, which is like subqueryloading but more or less better in most ways (also seems you're doing "select IN" here), and "select IN" loading of subclass attributes on a joined inheritance mapping.

The hook you have here would be a third kind of hook, a "lazyload that works across the Session" hook. Definitely something new. I'm not sure all of the logic that's been copied into _emit_lazyload() really applies though; the top logic is all related to the specific object that has triggered the load, like if its pending or not, if it had any query option set up, the state.load_path, etc. You can't assume any of that stuff applies to all the other states if you are going across the whole result. It's probably better, since this is a very different kind of loader, to make it just load for all the states in the same way without looking at any of their options or things like that.



On 05/03/2017 08:52 AM, David Chanin wrote:
Ack, thanks Simon! That is definitely a bug :). I just pushed a fix.

Thanks for the feedback!
David

On Wednesday, May 3, 2017 at 5:47:54 PM UTC+8, David Chanin wrote:

    Hi Everyone,

    We just open-sourced a custom lazy loader for SQLAlchemy that does
    bulk lazy loading of relations - essentially a lazy subqueryload.
    The idea is that whenever a relation is lazy-loaded on a model, the
    loader will look for all similar models in the session that haven't
    had that relation populated yet and will issue a single SQL query to
    populate them all in bulk. I'm really curious to hear any feedback
    you may have on this idea / implementation, pitfalls that we're
    overlooking, or ideas for improvement. The repo is at
    https://github.com/operator/sqlalchemy_bulk_lazy_loader
    <https://github.com/operator/sqlalchemy_bulk_lazy_loader>. Hope it's
    useful to others as well.

    Thanks so much!

--
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 <mailto:sqlalchemy+unsubscr...@googlegroups.com>. To post to this group, send email to sqlalchemy@googlegroups.com <mailto: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