On Saturday, September 19, 2015 at 8:14:31 AM UTC-7, Michael Bayer wrote:
>
>
>
> On 9/18/15 7:58 PM, George Reilly wrote:
>
>
> Thanks for the prompt answer. I tried after_cursor_execute, but it didn't
> really help as I just got a tuple of the values, without a clear way to
> associate them with the parameter names. Ultimately, I found that the
> following gives me the best results:
>
>
> named_params
> = {}
> for k,v in query_params.iteritems():
> named_params[k] = v
> if v is None:
> label = text.binds[k]._identifying_key
> for param_dict in multiparams:
> if label in param_dict:
> named_params[k] = param_dict[label]
> break
>
> Now I can identify which queries are being called repeatedly with
> identical parameters; I couldn't before.
>
>
> OK, you can also take a look at the "context" passed there, which has the
> parameters in a consistent format, i think in .compiled_parameters. Poke
> around it to see.
>
Ah, that made it simpler.
def _extract_parameters_from_results(self, query_results):
params_dict = {}
for p in getattr(query_results.context, 'compiled_parameters', []):
params_dict.update(p)
return params_dict
> Changing topic somewhat, I find it frustrating that the session does not
> cache queries.
>
> "caching queries" is an ambiguous term. It could mean:
>
> 1. that we cache the production of the SQL string given a Query or
> select() object. A lot of that kind of caching *does* go on behind the
> scenes in the ORM's flush process, but if you want it for SELECT objects
> via Query, we have BakedQuery for that:
> http://docs.sqlalchemy.org/en/rel_1_0/orm/extensions/baked.html
>
> 2. that the results of an ORM query invocation are cached. This is a
> simple feature to implement, but as a user, it gets confusing very fast,
> considering that the ORM emits lots of different kinds of statements in
> different situations, especially if you're looking to invalidate the
> cache. For this reason, we ask that our users make an investment in
> understanding the mechanics of query result caching, hence it is available
> as an example suite, which you can see at Dogpile Caching:
> http://docs.sqlalchemy.org/en/rel_1_0/orm/examples.html#module-examples.dogpile_caching
>
> .
>
>
> <http://docs.sqlalchemy.org/en/rel_1_1/orm/session_basics.html#is-the-session-a-cache>
> http://docs.sqlalchemy.org/en/rel_1_1/orm/session_basics.html#is-the-session-a-cache
>
> makes it clear that this is deliberate, but I think that section could
> benefit from further explanation about _why_ SQLAlchemy does not cache
> queries.
>
> This section refers explicitly to the fact that "caching queries" as you
> refer to here is a "second level cache", and links to the above dogpile
> example. The Session's caching is limited to transaction level identity
> caching only.
>
>
Fair enough. Thanks
/George
--
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.