On Thu, 15 Nov 2018 at 14:55, Mike Bayer <mike...@zzzcomputing.com> wrote:

> > And have all the query compilation cached. All the query stuff can be
> put near the model so your code isn't covered with fragments of SQLAlchemy.
> I have no idea if this pattern is common, but it works well for us.
>
> filter_by_id and filter_by_name seem to be just occurrences of
> "filter_by" with a single hardcoded keyword.   I'm not sure what the
> bindparam() part is doing either because a Core binary expression "col
> = 'name'" already genertes the bindparam for you.    This helper does
> not seem to be specific to "baked" query, as far as the calling API at
> least ?
>
>
What it acheives is that:

FooQuery(session).filter_by_id(1).all()

and

FooQuery(session).filter_by_id(2).all()

Both compile to the same (cached) Query and thus the same query is sent to
the database server. Since the parameters are rarely all the same the
anonymous bind is not useful here. In fact, if you don't use a bindparam()
here it will give wrong results because the Bakery keys off the f.func_code
and that doesn't take into account the dependancy. You can deal with this
by using:

self += ((lambda: q: Foo.id == id_), id)

But then you lose the benefits of the cache, and the Bakery is only useful
if you use the same Querys over and over. Unless I've completely
misunderstood how it works.

So this gives us all the benefits of baking while not being tied to
constant parameters. The API for the user does resemble what you do with
normally subclassing Query, which is nice because it means the users are
getting baked queries, without actually knowing they're getting them. The
saved parameters are automatically bound to the Result object on execution.

Hope this is clearer.

Have a nice day,
-- 
Martijn van Oosterhout <klep...@gmail.com> http://svana.org/kleptog/

-- 
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