On Thu, Nov 15, 2018 at 10:17 AM Martijn van Oosterhout
<klep...@gmail.com> wrote:
>
>
>
> 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.

well the "anonymous" bindparam() still has a name.   you just use that
name, and it gets converted to the "real" name when the statement is
executed:

>>> from sqlalchemy import *
>>> b1 = bindparam(None)
>>> b1.key
'%(140062366895800 param)s'
>>> s1 = select([b1])
>>> print(s1)
SELECT :param_1 AS anon_1
>>> s1.compile().construct_params({'%(140062366895800 param)s': 5})
{'param_1': 5}






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

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