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.