On Tue, Nov 6, 2018 at 2:20 PM <[email protected]> wrote:
>
> I have many classes, so it's seems a better idea to use something like that 
> (but I don't know what exactly is this registry, and why it's a WeakRef dict) 
> :
>
> binding = {cls: engine for cls in Base._decl_class_registry.values()}


see I don't want you to use that because it's a private variable.  You
should make your own "registry" as you do the automap.


>
> If not, maybe I can use the second approach, overloading Session, but is this 
> safe ?
>
> class BindSession(Session):
>     def get_bind(self, mapper=None, clause=None):
>         if mapper:
>             if issubclass(mapper.class_, SomeBase):
>                 return some_engine
>             elif issubclass(mapper.class_, OtherBase):
>                 return other_engine

oh is it based on two different bases?   Guess what, you can use those
base classes:

session = Session(binds={SomeBase: engine1, OtherBase: engine2})

docs seem to not be in-depth enough or adequately cross-linked, will fix



>        # correct ?
>        return super().get_bind(mapper,clause)
>
>
>
>
>
>
>
>
> Le mardi 6 novembre 2018 18:07:48 UTC+2, Mike Bayer a écrit :
>>
>> On Tue, Nov 6, 2018 at 9:41 AM <[email protected]> wrote:
>> >
>> > Hi,
>> >
>> > I'm using a schema with multiple DB, like :
>> >
>> > engine1 = 
>> > create_engine("mysql://localhost/{db}?charset=utf8".format(db=db1))
>> > engine2 = 
>> > create_engine("mysql://localhost/{db}?charset=utf8".format(db=db2))
>> >
>> > Then I use automap and reflection to generate mapping of all classes 
>> > needed.
>> >
>> > Sometime, I want to use classes from both databases, but I cannot bind my 
>> > session directly with two engines.
>> >
>> > I noticed that I can use the Session `binds` argument to decide which 
>> > class to bind to some engine, but I have many classes to include here, and 
>> > this is somewhat error prone.
>> >
>> > Is there any solution to automate the binding definition against each 
>> > class ? Or to bind a session directly to multiple engines ?
>>
>> you would use the "binds" argument as you saw in
>> https://docs.sqlalchemy.org/en/latest/orm/session_api.html#sqlalchemy.orm.session.Session.params.binds.
>>
>> as you noticed though, you have to tell the Session which classes map
>> to which engine.   So when you use automap, each time you reflect()
>> for a particular engine, you need to gather all the classes that were
>> generated for that call and add them to a dictionary, which you can
>> then pass to session.binds.
>>
>> If you have some totally other way to tell the Session, given a class,
>> which engine to use, you can also make your own method to do whatever
>> you want and override it, by overriding get_bind:
>> https://docs.sqlalchemy.org/en/latest/orm/session_api.html#sqlalchemy.orm.session.Session.get_bind
>> .    you probably don't need to do it this way but there's an example
>> of how that looks at
>> http://techspot.zzzeek.org/2012/01/11/django-style-database-routers-in-sqlalchemy/.
>>
>>
>>
>> >
>> > Thank you
>> >
>> >
>> > --
>> > 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 [email protected].
>> > To post to this group, send email to [email protected].
>> > 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 [email protected].
> To post to this group, send email to [email protected].
> 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 [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to