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.

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






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 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 http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

--
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 http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to