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.