Yup. We screwed up by using metadata.bind but I think we may be stuck
with it. Is it possible to bind a metadata collection within a
session? i.e would session.configure(binds={metadata_collection_1 :
e1, metadata_collection_2 : e2}) work? We would like to be able to
bind groups of tables at the same time rather than doing them
individually or having a single common bind for the session ... a lot
of our applications access data across multiple data-servers and with
multiple-logins
pjjH
On Sep 24, 12:12 am, Michael Bayer mike...@zzzcomputing.com wrote:
On Sep 23, 2009, at 6:36 PM, phrrn...@googlemail.com wrote:
I have a hidden WriterSession which I am using behind the scenes to
manage a number of API entries that write data in bulk e.g. upsert
(MappedClass, iterator_that_returns_dicts). I want the session to only
look at its own binds and to ignore any that are in place on the
metadata collection. I wrote my own get_bind that does this
(horrible!) hack:
if self._Session__binds:
b = self._Session__binds
if c_mapper:
if c_mapper.base_mapper in b:
return b[c_mapper.base_mapper]
elif c_mapper.mapped_table in b:
return b[c_mapper.mapped_table]
if self.bind:
return self.bind
I don't really understand how the double underscore stuff works in
Python. Mike, how would you feel about exposing the session bind
information with an interface that is more amenable to subclassing?
The binds collection on Session is set via the binds argument, or
one at a time using bind_mapper() and bind_table(). get_bind() does
not consult the metadata's bind unless none of session.bind or or
__binds has been configured. So there shouldn't be any need to
hack get_binds().
Also I would strongly advise against using metadata.bind for any
application that uses more than one engine. Here's what the 0.5
docs
athttp://www.sqlalchemy.org/docs/05/metadata.html#binding-metadata-to-a...
have to say:
Note that the feature of binding engines is completely optional. All
of the operations which take advantage of “bound” MetaData also can be
given an Engine or Connection explicitly with which to perform the
operation.
Here's what 0.6 has to say
athttp://www.sqlalchemy.org/docs/06/metadata.html#binding-metadata-to-a...
:
Binding the MetaData to the Engine is a completely optional feature.
The above operations can be achieved without the persistent bind using
parameters: (examples)
Should you use bind ? It’s probably best to start without it. If you
find yourself constantly needing to specify the same Engine object
throughout the entire application, consider binding as a convenience
feature which is applicable to applications that don’t have multiple
engines in use and don’t have the need to reference connections
explicitly. It should also be noted that an application which is
focused on using the SQLAlchemy ORM will not be dealing explicitly
with Engine or Connection objects very much in any case, so it’s
probably less confusing and more “future proof” to not use the bind
attribute.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups
sqlalchemy group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to
sqlalchemy+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en
-~--~~~~--~~--~--~---